2016-11-25 264 views
0

我想用另一個單詞替換另一個文件中的單詞。如何用Linux中另一個文件中的單詞替換文件中的單詞

比方說,我有2個文件:

文件#1包含:千斤頂
文件#2包含:你好名

我怎麼能取代 「傑克」 字 「名」? PS:文件#1只包含這個詞,不需要任何正則表達式。

+0

純'sed'的解決方案是不可能的,因爲'sed'無法從文件到另一個文件獲取信息。 – pts

回答

2

這個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解決方案打開兩個file1file2本身(而不是依靠外殼或cat打開文件),那麼它可能是不可能的。

+0

謝謝你的回答,sed命令就像一個魅力。然後我將用舊的文件替換新的文件。 – MuhammadNe

+1

可以使用'r'命令讀取sed中的文件內容,即使文件包含換行符也是健壯的,並且這樣...替換部分行很棘手,如果字符串「Hello」已知並且唯一。 。'sed -e'/ name/r file1'-e's ///'file2 | sed'/ Hello/{N; s/\ n //}''..當sed支持'-i'時爲什麼使用臨時文件? 'sed -i's @ name @ $( Sundeep

3

天哪,只用awk:

awk 'NR==FNR{name=$0; next} {sub(/name/,name); print}' file1 file2 
+1

但是有可能將其替換到同一個文件中? 例如,我嘗試添加'...> file2',但它清空了文件,並嘗試'... >> file2'我將正確的文本追加到文件末尾,那麼有沒有辦法? – MuhammadNe

相關問題