sed を使用して指定されたファイルの文字列を別のファイルの文字列に置き換える

sed を使用して指定されたファイルの文字列を別のファイルの文字列に置き換える

そのようなファイルが2つあります。

ファイル1

line 1
line 2
... (more lines)
aaa PLACEHOLDER bbb ccc
... (more lines)
ddd PLACEHOLDER eee fff
... (more lines)
etc

ファイル2

NEWTEXT1
NEWTEXT2
... (more lines)

file2 の NEWTEXT 文字列の数は、常に file1 の PLACEHOLDER を含む行数と同じです。 PLACEHOLDER 文字列が file1 のどの行にあるかはわかりません。PLACEHOLDER 文字列の数は、file1 および file2 ファイルセットごとに異なる場合があります。

各PLACEHOLDERをファイル2の対応する文字列に置き換えたいと思います。したがって、この例では、新しいファイルは次のようになります。

line 1
line 2
... (more lines)
aaa NEWTEXT1 bbb ccc
... (more lines)
ddd NEWTEXT2 eee fff
... (more lines)
etc

sedを使用してこれを達成できますか?ありがとうございます。

ベストアンサー1

私は以下を使用しますperl

perl -pe '
  s{PLACEHOLDER}{
    $replacement = <STDIN>;
    chomp $replacement;
    $replacement
  }ge' file1 < file2

PLACEHOLDERまた、1行に複数回交換できます。

おすすめ記事