我正在尝试使用sed执行查找/替换和插入,但我不断收到一条消息,指出“n命令末尾有额外字符”。我也没有从终端运行它,它嵌入在shell脚本中,所以我可以将它发送给其他人。
这就是我正在尝试运行的
sed -i 's/include "/var/run/racoon/*.conf" ;/# include "/var/run/racoon/*.conf" ;/g' ~/Documents/test.conf;
sed '$a; include "/etc/racoon/remote/*.conf" ;/g' ~/Documents/test.conf;
为了便于查看,我正在尝试替换
include "/var/run/racoon/*.conf" ;
与
# include "/var/run/racoon/*.conf" ;
然后添加此
include "/etc/racoon/remote/*.conf" ;
基本上,我只想注释掉文件的最后一行,然后在它后插入一行。我对sed很新,所以我不确定我是否会这么做错,任何帮助都将不胜感激!
答案 0 :(得分:1)
您尝试的内容至少有两个问题:
/
。您可以使用|
。*
需要转义\*
。因此,第一个表达式看起来像:
sed -i 's|include "/var/run/racoon/\*.conf" ;|# include "/var/run/racoon/*.conf" ;|g' ~/Documents/test.conf;
同样,改变第二个。
答案 1 :(得分:1)
如果遇到任何人遇到此问题,您必须下载gnu-sed或通过其他方式执行此操作。
如果您安装了Homebrew,可以轻松下载gnu-sed。
brew install gnu-sed
或者你可以像我一样使用perl和printf
进行更换
sudo perl -pi -e 's|include "/var/run/racoon/\*.conf" ;|# include "/var/run/racoon/*.conf" ;|g' /etc/racoon/racoon.conf;
添加一行。对我来说它总是139行,所以我可以走这条路。
line='include "/etc/racoon/remote/*.conf" ;'
sudo printf '%s\n' H 139i "$line" . wq | ed -s /etc/racoon/racoon.conf
感谢devnull帮助我正确理解语法。