List replacements using sed or awk

For a simple text file with lines

bli foo bla
 abc
 dfg
bli foo bla
 hik
 lmn

what sed or awk magic converts it to

bli foo_01 bla
 abc
 dfg
bli foo_02 bla
 hik
 lmn

so each occurrence of "foo" is replaced by "foo_ [occurrence number]".

+3
source share
3 answers

This is another way to express radoulov's answer

awk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile

You must ensure that you do not match "foobar" when searching for "foo":

gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1' 
0
source
awk '!/foo/||sub(/foo/,"&_"++_)' infile

Use gawk, nawk or / usr / xpg 4 / bin / awk on Solaris.

+2
source

, , , , .

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

EDIT:

, , ; - (


EDIT2:

- , ... Java ... UTF-8, " ";-) * nix - .

+1
source

Source: https://habr.com/ru/post/1708642/


All Articles