BSD sed;从脚本运行时出现错误“未替换模式中未转义的换行符”

时间:2018-03-10 18:33:55

标签: shell sed sh freebsd

我正在尝试使用(BSD)/etc/gettytab修改我的P|Pc|Pc console:\ :ht:np:sp#9600: 。目标是修改此条目:

P|Pc|Pc console:\
        :ht:np:sp#115200:\
        :cl=\E[H\E[2J:

到这个条目:

# sed -in ' /P|Pc|Pc console/,/^#/ s/9600:/115200:\\\\  
        :cl=\E[H\E[2J:/' /etc/gettytab

如果我发出以下命令(它在两行上),它可以很好地工作。

sed: 1: " /P|Pc|Pc console/,/^#/ ...": unescaped newline inside substitute pattern

但是,如果我在脚本中使用完全相同的命令(字面上复制/粘贴它),我会收到一条错误消息:

/

正在搜索,我发现了这篇帖子:unescaped newline inside substitute pattern,其中讨论了{{1}},但我的模式中有这个。

如果有人可以帮助我做错了什么,我会非常感激。

1 个答案:

答案 0 :(得分:2)

在您的脚本中,您使用> z AA BB CC 2.3 1.5 202.4 2.1 1.0 200.8 2.1 1.0 208.1 转义换行符,然后转义要嵌入到输出中的\,以便按字面解释。如果我的数学是正确的,那就是三,而不是四个反斜杠。

\