我想用另一個單詞替換另一個文件中的單詞。如何用Linux中另一個文件中的單詞替換文件中的單詞
比方說,我有2個文件:
文件#1包含:千斤頂
文件#2包含:你好名
我怎麼能取代 「傑克」 字 「名」? PS:文件#1只包含這個詞,不需要任何正則表達式。
我想用另一個單詞替換另一個文件中的單詞。如何用Linux中另一個文件中的單詞替換文件中的單詞
比方說,我有2個文件:
文件#1包含:千斤頂
文件#2包含:你好名
我怎麼能取代 「傑克」 字 「名」? PS:文件#1只包含這個詞,不需要任何正則表達式。
這個shell命令將使用Perl做替換:
NAME="$(cat file1)" perl -pi -e '[email protected]@$ENV{NAME}@g' file2
另一種用Perl:
perl -pi -e "[email protected]@$(cat file1)@g" file2
與sed
一種替代,使用-i
修改的地方文件:
sed -i "[email protected]@$(cat file1)@g" file2
以上所有解決方案都假定file1
不包含換行符(可能除了後面的換行符),反斜槓和符號(@
)。
如果你想要一個純sed
解決方案打開兩個file1
和file2
本身(而不是依靠外殼或cat
打開文件),那麼它可能是不可能的。
謝謝你的回答,sed命令就像一個魅力。然後我將用舊的文件替換新的文件。 – MuhammadNe
可以使用'r'命令讀取sed中的文件內容,即使文件包含換行符也是健壯的,並且這樣...替換部分行很棘手,如果字符串「Hello」已知並且唯一。 。'sed -e'/ name/r file1'-e's ///'file2 | sed'/ Hello/{N; s/\ n //}''..當sed支持'-i'時爲什麼使用臨時文件? 'sed -i's @ name @ $(
天哪,只用awk:
awk 'NR==FNR{name=$0; next} {sub(/name/,name); print}' file1 file2
但是有可能將其替換到同一個文件中? 例如,我嘗試添加'...> file2',但它清空了文件,並嘗試'... >> file2'我將正確的文本追加到文件末尾,那麼有沒有辦法? – MuhammadNe
純'sed'的解決方案是不可能的,因爲'sed'無法從文件到另一個文件獲取信息。 – pts