質問

行が含まれるプレーンテキストファイルがあるとします

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_[出現番号]」に置き換えられます。

役に立ちましたか?

解決

このはradoulovの答えを表現する別の方法です。

awk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile
「foo」という探しながら

あなたは「foobarに」とは一致しないように注意を取る必要があります:

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

他のヒント

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

使用のgawkのの、のnawkのまたはのは/ usr / XPG4 / binに/ awkののSolarisのの上。

これはおそらくあなたが必要とするものではありませんが、正しい方向へのアイデアが得られるかもしれません。

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

編集:

またまた1日遅れて1ペニー不足です ;-(


編集2:

文字エンコーディングも注意すべき点です...Java ソース コードは、必ずしもシステムのデフォルトのエンコーディングであるとは限りません...埋め込まれた「高次エンティティ」を許可するために、UTF-8 エンコードはやめました ;-) 多くの *nix ユーティリティはまだ文字セットを認識していません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top