Sed
使用 sed 將文件中的指定字元串替換為來自其他文件的字元串
我有兩個這樣的文件。
文件 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 的不同集而異。
我想用文件 2 中的相應字元串替換每個 PLACEHOLDER。所以對於這個例子,新文件是
line 1 line 2 ... (more lines) aaa NEWTEXT1 bbb ccc ... (more lines) ddd NEWTEXT2 eee fff ... (more lines) etc
這可能與 sed 謝謝。
我們可以使用
GNU sed
流編輯器並將 file2 中的一個 newtext 行放在佔位符行下方,然後在下一次呼叫 sed 時加入它們:-sed -e '/PLACEHOLDER/R file2' file1 | sed -Ee ' /PLACEHOLDER/N s/PLACEHOLDER(.*)\n(.*)/\2\1/ ' -
結果:-
line 1 line 2 ... (more lines) aaa NEWTEXT1 bbb ccc ... (more lines) ddd NEWTEXT2 eee fff ... (more lines) etc
以上的單行版本:
$ sed -e '/PLACEHOLDER/R file2' file1 | sed -Ee '/PLACEHOLDER/N;s/PLACEHOLDER(.*)\n(.*)/\2\1/' -
我會使用
perl
:perl -pe ' s{PLACEHOLDER}{ $replacement = <STDIN>; chomp $replacement; $replacement }ge' file1 < file2
PLACEHOLDER
這也允許每行替換多個。