2017-07-17 77 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