تعداد التبديلات مع sed أو awk
-
22-08-2019 - |
سؤال
بالنظر إلى ملف نص عادي مع خطوط
bli foo bla
abc
dfg
bli foo bla
hik
lmn
ما sed أو awk السحر تحول إلى
bli foo_01 bla
abc
dfg
bli foo_02 bla
hik
lmn
بحيث أن كل قوع من 'فو' يتم استبدال 'foo_[قوع عدد]'.
المحلول
وهذا هو طريقة أخرى للتعبير عن الجواب radoulov ل
awk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile
ويجب أن تأخذ الرعاية التي لا تطابق "foobar" بينما كانوا يبحثون عن "فو":
gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1'
نصائح أخرى
awk '!/foo/||sub(/foo/,"&_"++_)' infile
استخدم البله م>، <م> nawk م> أو <م> / البيرة / xpg4 / بن / AWK م> على <م> سولاريس م>.
هذا ربما ليس ما تحتاج, ولكن قد تعطي بعض الأفكار في الاتجاه الصحيح.
Administrator@snadbox3 ~
$ cd c:/tmp
Administrator@snadbox3 /cygdrive/c/tmp
$ cat <<-eof >foo.txt
> foo
> abc
> dfg
> foo
> hik
> lmn
> eof
Administrator@snadbox3 /cygdrive/c/tmp
$ awk '/^foo$/{++fooCount; print($0 "_" fooCount);} /^ /{print}' foo.txt
foo_1
abc
dfg
foo_2
hik
lmn
تحرير:
أنا يوم في وقت متأخر بيني قصيرة مرة أخرى؛ - (
EDIT2:
حرف ترميزات هو شيء آخر لبالمرصاد...جافا شفرة المصدر ليس بالضرورة في أنظمة الترميز الافتراضي...انه استقال UTF-8 ترميز السماح لأي جزءا لا يتجزأ من "أعلى ترتيب الكيانات" ;-) كثير *nix المرافق لا محارف-علم.
لا تنتمي إلى StackOverflow