Вопрос

Дан обычный текстовый файл со строками

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' заменяется на 'foo_[номер вхождения]'.

Это было полезно?

Решение

Это еще один способ выразить ответ радулова

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

Вам следует позаботиться о том, чтобы при поиске "foo" не совпадало с "foobar":

gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1' 

Другие советы

awk '!/foo/||sub(/foo/,"&_"++_)' infile

Использование поглазеть, наукообразный или /usr/xpg4/bin/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

Редактировать:

Я снова опоздал на день и у меня не хватает пенни ;-(


РЕДАКТИРОВАТЬ 2:

Кодировки символов - это еще одна вещь, на которую следует обратить внимание...Исходный код Java не обязательно находится в системной кодировке по умолчанию...он не закодирован в UTF-8, чтобы разрешить любые встроенные "объекты более высокого порядка" ;-) Многие утилиты * nix по-прежнему не поддерживают кодировку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top