foo.txt ファイルとそのファイルで探したい正規表現があります。正規表現が見つかるたびに、別のファイルbar.txtから1行を取り、foo.txtで見つかった正規表現の一致に置き換えたいと思います。デフォルトでは検索/置換が必要ですが、置き換えるたびにbar.txtの次の行に次の代替テキストが表示されます。
これを実行できる単純なシェル魔法はありますか?
答え1
私が正しく理解すれば、おそらく次のようになります。
awk '{getline repl < "second-file"; sub(/regexp/, repl); print}' < first-file
または、regexp
各行が複数回発生するか、まったく発生しない場合:
perl -pe 's/regexp/chomp($r=<STDIN>);$r/ge' first-file < second-file
答え2
perl -pe '
BEGIN {
open IN, "<replacements" or die $!;
}
s/pattern/
$tmp = <IN>;
chomp $tmp;
$tmp
/xe;
' filename