sed または awk を使用して置換を列挙する
-
22-08-2019 - |
質問
行が含まれるプレーンテキストファイルがあるとします
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 ユーティリティはまだ文字セットを認識していません。
所属していません StackOverflow