我运行了下面的sed命令
sed -i s/abc=.*$/abc=def ghi/g hpq_sf_attach_wf_param.txt
然后它给我了一个错误:
sed: -e expression #1, char 17: unterminated `s' command
我注意到问题是由于def
和ghi
之间有空格导致的。
有什么办法可以解决吗?
您需要使用引号来保护特殊字符,包括空格、$
和*
。
sed -i 's/abc=.*$/abc=def ghi/g' hpq_sf_attach_wf_param.txt
hpq_sf_attach_param.txt
的示例行? - geekosaur所以geekosaur说得对。但是你遇到这个问题的原因是因为通配符需要使用双引号,因为使用单引号时,它将把它们作为文字字符而不是你想要的含义进行处理。
sed -i "s/abc=.*$/abc=def ghi/g" hpq_sf_attach_wf_param.txt
sed -i "s/abc=.*$/abc=def\ ghi/g" hpq_sf_attach_wf_param.txt
$
,而$/
不是有效的shell变量,因此保持不变。考虑:echo "s/abc=.*$/abc=def ghi/g"|md5sum; echo 's/abc=.*$/abc=def ghi/g'|md5sum
。如果有区别,为什么md5sum输出相同?此外,\
没有任何有用的作用。 - jhnc