gpt4 book ai didi

shell - BSD 环境;从脚本运行时出现错误 "unescaped newline inside substitute pattern"

转载 作者:行者123 更新时间:2023-12-01 11:34:25 24 4
gpt4 key购买 nike

我正在尝试使用 (BSD) sed 来修改我的 /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它谈到尾随 /,但我的模式中有它。

如果有人可以帮助解决我做错的事情,我将不胜感激。

最佳答案

在您的脚本中,您使用 \ 转义换行符,并且转义要嵌入到输出中的 \ 以便按字面解释。如果我的数学是正确的,那就是三个,而不是四个反斜杠。

$ cat i
P|Pc|Pc console:\
:ht:np:sp#9600:
$ cat i.sh
#!/bin/sh

# ┏━━━ escapes the next character,
# ┃┏━━ literal backslash for output,
# ┃┃┏━ escapes the newline.
sed -ne '/^P|/,/^#/ s/9600:/115200:\\\
:cl=\E[H\E[2J:/' -e p i

$ ./i.sh
P|Pc|Pc console:\
:ht:np:sp#115200:\
:cl=E[HE[2J:
$

关于shell - BSD 环境;从脚本运行时出现错误 "unescaped newline inside substitute pattern",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212645/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com