Enumera sostituzioni con sed o awk
-
22-08-2019 - |
Domanda
Dato il file di testo con le linee
bli foo bla
abc
dfg
bli foo bla
hik
lmn
quello sed o awk magia trasforma in
bli foo_01 bla
abc
dfg
bli foo_02 bla
hik
lmn
in modo che ogni occorrenza di 'foo' è sostituito da 'foo_ [numero occurence]'.
Soluzione
Questo è un altro modo per esprimere la risposta di radoulov
awk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile
Si dovrebbe fare attenzione a non corrispondono "foobar", mentre cerca di "foo":
gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1'
Altri suggerimenti
awk '!/foo/||sub(/foo/,"&_"++_)' infile
Usa gawk , nawk o / usr / XPG4 / bin / awk su Solaris .
Questo probabilmente non è quello che avete bisogno, ma potrebbe dare alcune idee nella direzione giusta.
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
Modifica
Sono un giorno di ritardo e un centesimo breve, ancora una volta, - (
EDIT2:
codifiche di carattere è un'altra cosa da ricerca di ... Java codice sorgente non è necessariamente nella codifica dei sistemi di default ... è smettere di codifica UTF-8, per consentire qualsiasi "entità di ordine superiore" incorporati ;-) Molti * nix utilità ancora non sono charset-aware.