سؤال

بالنظر إلى ملف نص عادي مع خطوط

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 المرافق لا محارف-علم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top