2014-06-23 27 views
-1

大家好,我遵循以下Find and Replace Inside a Text File from a Bash Command我不能用終端上的sed正確替換字符串

現在我使用的sed解決方案似乎工作,如果我使用兩個preifined字符串,但我想用文件中的東西,而不是我定義的內容替換內容。

我有一個帶有「功夫狗」字樣的文件,我希望它用單詞「熊貓」替換單詞「狗」,但該單詞在另一個文件中。我試着這樣做:

sed -i 's/dog/$(cat filethatcontainspanda)/g' /home/myhome 

但問題是,而不是與熊貓一詞改爲狗,我用「$(貓filethatcontainspanda)」一詞改爲「狗」所以到底而不是「功夫熊貓「,我有」功夫$(貓filethatcontainspanda)「。有沒有解決這個問題的方法?

+3

你嘗試雙引號:'sed的-i 「s/dog/$(cat filethatcontainspanda)/ g」/ home/myhome' – anubhava

+1

是的,它解決了它的雙引號工作正常,我試過像第一次雙引號sed -i's/dog /「$( cat filethatcontainspanda)「/ g'/ home/myhome它沒有工作,但你的解決方案很好,非常感謝。 – user234688

+0

@ user234688單引號內的雙引號沒有特殊含義 - 您仍在一個受擴展保護的字符串中。 –

回答

0

您需要用雙引號",而不是單一的'awk代替cat

sed -i "s/dog/$(awk '{print $1}' filethatcontainspanda)/g" /home/myhome 
+2

爲什麼awk?如果該文件只包含一個單詞,那麼'cat'很好。 – tripleee

0

您必須使用「,而不是」

sed -i "s/dog/$(cat filethatcontainspanda)/g" /home/myhome