2017-07-17 54 views
1

我使用下面的命令將「mppu」單詞替換爲「hihi」,它正常工作。使用sed命令的unix腳本錯誤

sed 's/mppu/'`echo "hihi"`'/' memo.cir 

,但是當我試圖下面的命令

sed 's/mppu/'`echo "hi hi"`'/' memo.cir 

然後提示錯誤爲

sed: -e expression #1, char 9: unterminated `s' command. 

我真的不爲什麼它被賦予這樣的錯誤,我只是增加了一個hihi中的空間

回答

0

正確的語法如下。

解決方法第1項:用於簡單替換字符串。

sed 's/old_text/new_text/' Input_file 

你不必提及echo和所有那裏。

解決第二:如果你要搜索的字符串,然後做任何字符串的替換則以下可以幫助你在相同的。

sed '/look_for_string/s/old_text/new_test/' Input_file 

解決方案3:如果你想改變任何字符串的多個/所有出現成一行,則以下可以通過在最後一個命令的加入摹幫助你。

sed '/look_for_string/s/old_text/new_text/g' Input_file 

解決方案4:如果你想要做的變成INPUT_FILE然後自己以下可能會幫助你一樣。

sed -i '/look_for_string/s/old_text/new_text/g' Input_file 

EDIT1:按OP,代碼應該更換一個變量的值,以行,然後下面可以幫助你在相同即可。

VAL="SINGH" 
sed 's/tools/'"$VAL"'/' Input_file 

EDIT2:添加一例OP用於替代的字符串的第n個號碼,如果它匹配的字符串。 假設以下是我的Input_file。

cat Input_file 
31116441 
AAA,hi,hi,hi,hji 
AAA 
AA 
BBB 
BB 

現在替換字符串(HI)的第3個發生了,從我們可以做到以下則AAA星線。

sed '/AAA/s/hi/cha_cha_ch_ch_cha/3' Input_file 
31116441 
AAA,hi,hi,cha_cha_ch_ch_cha,hji 
AAA 
AA 
BBB 
BB 
+0

這是一個例子,但在我的代碼,我會得到來自其他命令替換文本如果替換文本包含空格,該命令也會給出相同的錯誤。但下面的命令完全正常。 sed's/mppu /這是替換文本/'memo.cir –

+0

您是指您想要替換的變量值?你能否確認一下? – RavinderSingh13

+0

不是變量值,但是它是給出「mppu」的替換文本的另一個命令,但是我可以將它存儲在變量中並使用該變量替換,但那也不起作用。 –

0

您需要引用外部命令的輸出。 set -x有助於調試出錯的地方。

$ set -x 
# can also use: echo 'asd mppu foo' | sed 's/mppu/'"`echo "hi hi"`"'/' 
$ echo 'asd mppu foo' | sed 's/mppu/'"$(echo "hi hi")"'/' 
+ echo 'asd mppu foo' 
++ echo 'hi hi' 
+ sed 's/mppu/hi hi/' 
asd hi hi foo 

您可以看到hi hi位於外部單引號內。如果沒有雙引號,你會得到

$ echo 'asd mppu foo' | sed 's/mppu/'`echo "hi hi"`'/' 
+ echo 'asd mppu foo' 
++ echo 'hi hi' 
+ sed s/mppu/hi hi/ 
sed: -e expression #1, char 9: unterminated `s' command 


同樣,換行會導致問題

$ echo 'asd mppu foo' | sed 's/mppu/'"$(printf "hi hi\nabc")"'/' 
+ echo 'asd mppu foo' 
++ printf 'hi hi\nabc' 
+ sed 's/mppu/hi hi 
abc/' 
sed: -e expression #1, char 12: unterminated `s' command 

隨着變量而不是外部命令:

$ r='hi hi' 
$ echo 'asd mppu foo' | sed 's/mppu/'"$r"'/' 
+ echo 'asd mppu foo' 
+ sed 's/mppu/hi hi/' 
asd hi hi foo 
$ echo 'asd mppu foo' | sed 's/mppu/'$r'/' 
+ sed s/mppu/hi hi/ 
sed: -e expression #1, char 9: unterminated `s' command 
+ echo 'asd mppu foo' 

有關詳細信息,請參見Why does my shell script choke on whitespace or other special characters?此主題

0

,你可以使用

sed 's/old/new/g' file 

,如果你要替換的變量,您可以使用後續的牽引方法

sed -i 's/XXXXX/${WEEK_DAY}/g' ==> sed -i "s/XXXXX/${WEEK_DAY}/g" 
sed -i 's/XXXXX/${WEEK_DAY}/g' ==> sed -i 's/XXXXX/'${WEEK_DAY}'/g' 
+0

您需要引用變量替換,查看'WEEK_DAY ='hi hi'之間的區別;回聲'XXXXX'| sed's/XXXXX /'$ {WEEK_DAY}'/ g''和'WEEK_DAY ='hi hi';回聲'XXXXX'| sed's/XXXXX /'「$ {WEEK_DAY}」'/ g'' – Sundeep