特定のパターン(たとえば)を含むファイルをディレクトリから検索してにfoobar
置き換える必要がありますfoobarXXX
。ここでXXX
、は数値です。たとえば、元のファイルが2つあります。
snt130.txt
私の女主人の目はまったく似ていません。プヴァ;
プヴァ彼女の唇の赤色よりも赤い。
snt18.txt
あなたを夏の日に例えてもいいですか?
君はもっと可愛くて可愛いプヴァ:
処理後は次のようなものが必要です(数字の順序は重要ではなく、一意性のみが必要です)。
snt130.txt
私の女主人の目はまったく似ていません。foobar001;
foobar002彼女の唇の赤色よりも赤い。
snt18.txt
あなたを夏の日に例えてもいいですか?
君はもっと可愛くて可愛いfoobar003:
この検索と置換操作を実行する最も簡単な方法は何ですか(使用するのが最善ですbash
)
答え1
$ cat f1
My mistress' eyes are nothing like foobar;
foobar is far more red than her lips' red;
$ cat f2
Shall I compare thee to a summer's day?
Thou art more lovely and more foobar:
そしてperl
$ perl -i -pe 's/foobar\K/sprintf "%03d", ++$i/ge' f1 f2
$ cat f1
My mistress' eyes are nothing like foobar001;
foobar002 is far more red than her lips' red;
$ cat f2
Shall I compare thee to a summer's day?
Thou art more lovely and more foobar003:
0
数値コンテキストで初期化されていない変数のデフォルト値e
Modifierを使用すると、交換部品にPerlコードを使用できます。foobar\K
置き換える文字列は\K
便宜上ここにあります。
gawk
内部拡張があり、1行に1つの文字列インスタンスのみを想定しています。
gawk -i inplace -v s='foobar' '$0 ~ s{sub(s, sprintf("%s%03d", s, ++i))} 1' f1 f2