Auflisten von Substitutionen mit sed oder awk
-
22-08-2019 - |
Frage
die Textdatei mit Linien Gegeben
bli foo bla
abc
dfg
bli foo bla
hik
lmn
was sed oder awk Magie verwandelt es zu
bli foo_01 bla
abc
dfg
bli foo_02 bla
hik
lmn
so, dass jedes Vorkommen von 'foo' ersetzt durch 'foo_ [Vorkommen Nummer]'.
Lösung
Dies ist ein weiterer Weg radoulov Antwort
auszudrückenawk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile
Sie sollten darauf achten, dass Sie nicht „foobar“ entsprechen, während für „foo“ suchen:
gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1'
Andere Tipps
awk '!/foo/||sub(/foo/,"&_"++_)' infile
Mit gaffen nawk oder / usr / xpg4 / bin / awk auf Solaris .
Dies ist wahrscheinlich nicht das, was Sie benötigen, aber es könnte einige Ideen in der richtigen Richtung geben.
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:
Ich bin ein Tag zu spät und ein Penny kurz, wieder; - (
EDIT2:
Zeichenkodierungen ist eine andere Sache zu Suche nach ... Java-Quellcode nicht unbedingt in den Systemen Standard-Kodierung ist ... es beenden UTF-8 codiert, für alle eingebetteten „höherer Ordnung entities“ zu ermöglichen ;-) Viele * nichts-Dienstprogramme noch nicht charset-aware.