我的 ~/.ssh/config 中有一个块内容。以“# BEGIN AUTO GENERATED CONTENT”行开始,以“# END AUTO GENERATED CONTENT”行结束
我有一个命令替换这两行之间的内容,内容是从名为“config”的文件中读取的
sed -i -ne '/# BEGIN AUTO GENERATED CONTENT/ {p; r config' -e ':a; n; /# END AUTO GENERATED CONTENT/ {p; b}; ba}; p' ~/.ssh/config
它在 ubuntu 中运行良好,但在我使用 bsd sed 的 mac 中无法运行。它给出了这个错误消息:
sed: 1: "/# BEGIN AUTO GENERATED ...": unexpected EOF (pending }'s)
我需要更正这个命令才能在 bsd 中工作。不在 mac 中使用 gsed
答案1
首先,由于您使用的是 Mac,因此单独的-i
选项不起作用。您需要为其提供一个值,在您的情况下为空值。
其次,由于开关已生效,因此可以根据您的情况更改p;b
该对。分支命令与旧版本中的右大括号不能很好地结合起来。p;d
-n
b
seds
$ sed -i '' -ne '/# BEGIN AUTO GENERATED CONTENT/{' -e 'p;r config' -e ':a;n' -e '/# END AUTO GENERATED CONTENT/{' -e 'p;d' -e '}' -e 'ba' -e '}' -e 'p' ~/.ssh/config
除非这是一种使用并抛出的东西,否则最好将其重写在文件中,然后调用为:
$ sed -i '' -nf ./code ~/.ssh/config
$ cat ./code
/# BEGIN AUTO GENERATED CONTENT/{
p
r config
:loop
n
/# END AUTO GENERATED CONTENT/{
p
d
}
bloop
}
p