SED在模式后插入新行

时间:2014-10-31 14:23:52

标签: sed

我的脚本包含以下行:

   echo  + /etc>>$BUFFER

我想用sed编辑它们并在此之后插入另一行:

   echo  + /etc>>$BUFFER
   echo  - /etc/cache>>$BUFFER

并保留文件的其余部分。什么是SED正则表达式?

3 个答案:

答案 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的每次出现后添加该行。
  • 我只是添加行分隔符以限制只有这个确切的行内容(但可能有标题或尾随空格)