我有一个包含以下格式的数据的文件:
{"parameter":"toto.tata.titi", "value":"0/2", "notif":"1"}我用sed对文件进行了更改:
sed -i "/\<$param\>/s/.*/$line/" myfile哪个line变量是
{"parameter":"toto.tata.titi", "value":"0/2", "notif":"3"}param变量是toto.tata.titi
上面的sed命令返回错误:
sed: unmatched '/'因为line变量包含/ ==> "0/2"
如何更新sed命令以使其工作,即使line变量包含/
发布于 2014-07-31 11:06:51
您的$param或$line可能包含/在其上,这会导致sed出现语法错误。考虑使用其他分隔符,如|或@。
示例:
sed -i "/\<$param\>/s|.*|$line|" myfile但这可能还不够。当斜杠展开时,也可以引用它们:
sed -i "/\<${param//\//\\/}\>/s|.*|$line|" myfile还可以使用其他更安全的字符:
d=$'\xFF' ## Or d=$(printf '\xFF') which is compatible in many shells.
sed -i "/\<${param//\//\\/}\>/s${d}.*${d}${line}${d}" myfile发布于 2020-12-03 19:24:38
检查您的$param或$line变量是否有\n (换行符),在我的例子中,这是错误的原因。
发布于 2019-09-25 10:38:51
在我的ansible任务中使用sed -i.bak的/\r$//‘命令时,我也犯了同样的错误。我通过简单地将“\”中的“\”转义来解决这个问题。我将命令更改为sed -i.bak 's/\\r$//'
https://stackoverflow.com/questions/25057295
复制相似问题