我的脚本包含以下行:
echo + /etc>>$BUFFER
我想用sed编辑它们并在此之后插入另一行:
echo + /etc>>$BUFFER
echo - /etc/cache>>$BUFFER
并保留文件的其余部分。什么是SED正则表达式?
答案 0 :(得分:1)
sed -i '$a echo - /etc/cache>>$BUFFER' myfile.txt
$表示最后一行,a表示附加-i选项将文件写入到位。
如果你想在任何地方匹配你可以使用正则表达式/ /像这样只是确保逃避/ like /因为sed期望正则表达式被封装在/ /
sed -i '/echo + \/etc>>$BUFFER/a echo - /etc/cache>>$BUFFER' myfile.txt
由于上述陈述的(复制和粘贴)省略了第一个+符号之前的空格(可能是由于运行本网站帖子的软件中的BUG) - 这里是复制时应该有效的版本):
sed -i '/echo \ + \/etc>>$BUFFER/a echo - /etc/cache>>$BUFFER' myfile.txt
或者如果你想避免在将来逃避单个前斜线(在这种情况下不是很有用,因为它只有一个,但如果你有很多前斜线 - 再次奇怪的逃逸空间只是由于一个BUG在这个网站的软件(或我的浏览器firefox),如果你在命令行输入它,你可以自己将间距加倍,因为它出现在askers问题中):
sed -i '\@echo \ + /etc>>$BUFFER@a echo - /etc/cache>>$BUFFER' myfile.txt
答案 1 :(得分:0)
如果我理解正确,这应该有效:
sed 's/echo \+ .*etc>>\$BUFFER/echo + \/etc>>\$BUFFER\necho - \/etc\/cache>>\$BUFFER/'
这不是最佳解决方案(我不知道如何处理模式中的正斜杠 - 理论上它应该足以逃脱它:\/
但奇怪的是它不起作用)
这应该可以工作
答案 2 :(得分:0)
sed -i '\#^ *echo + /etc>>\$BUFFER *$# a\
echo - /etc/cache>>$BUFFER' YourFile
echo + /etc>>$BUFFER
的每次出现后添加该行。