リストを使用してファイル内で検索/置換する最も簡単な方法は何ですか?

リストを使用してファイル内で検索/置換する最も簡単な方法は何ですか?

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

関連情報