2016-07-25 38 views
0

我在shell腳本中使用sed將文件中的單詞替換爲存儲在shell變量中的句子。該句子包含空格和不同的字符。空間干擾使用shell變量的sed替換

例:

sentence="new number is > than 2.5 and < than 3.8" 
sed "s|word|$sentence|g" -i Example_file.txt 

行的文件中:

tile = "word - Final plot" 

預期的結果:

title = "new number is > than 2.5 and < than 3.8 - Final plot" 

得到的結果:

title = "new - Final plot" 

正如你在上面看到的那樣,問題是sed總是用句子的第一個單詞替換「單詞」,它會停在空格處。我嘗試了命令的不同變化:

sed 's|word|'"$sentence"'|g' -i Example_file.txt 
sed "s|word|${sentence}|g" -i Example_file.txt 

這似乎沒有工作。要檢查空格是否確實是我用"_"替換它們的問題,並且當我這樣做時,sed將替換爲使用整個句子。

任何人都知道如何強迫sed進入空間並使用整個句子?

+1

這很難閱讀。請使用「代碼格式」按鈕來格式化您的代碼/命令行。這是一個單一的點擊! –

+0

感謝Inian做出改變! – Inacio

+1

你使用'GNU' sed ?.在'GNU sed version 4.2.1'上正常工作。 – Inian

回答

0

試試這個的基礎上,解決什麼問題,我認爲你的問題在你的意見告訴我們您正在做的:

文件1:

#!/bin/sh 
sed 's/\<word\>/'"$1"'/' abc.txt 

文件2:

#!/bin/sh 
sentence="new number is > than 2.5 and < than 3.8" 
./file1 "$sentence" 

谷歌「引用你的shell變量「。上面假設你的GNU sed的字邊界爲\<...\>。如果你沒有擺脫它們,看看它是否有效,那麼我們可以談論你如何在其他seds中解決對他們的需求。

+1

我確實沒有引用shell變量。代碼還包含了一些沒有空間的變量,因爲它爲那些我認爲對於那些有空間的人也有效。非常感謝您的回答,它解決了我的問題。 – Inacio