Sed 在图案后插入新行

Sed 在图案后插入新行,sed,Sed,我有包含以下行的脚本: echo + /etc>>$BUFFER 我想用sed编辑它们,并在此之后插入另一行: echo + /etc>>$BUFFER echo - /etc/cache>>$BUFFER 并保持文件的其余部分不变。SED regexp是如何做到这一点的?如果我理解正确,这应该可以: sed 's/echo \+ .*etc>>\$BUFFER/echo + \/etc>>\$BUFFER\

我有包含以下行的脚本:

   echo  + /etc>>$BUFFER
我想用sed编辑它们,并在此之后插入另一行:

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

并保持文件的其余部分不变。SED regexp是如何做到这一点的?

如果我理解正确,这应该可以:

sed 's/echo \+ .*etc>>\$BUFFER/echo + \/etc>>\$BUFFER\necho - \/etc\/cache>>\$BUFFER/'
这也许不是最好的解决方案(我不确定如何处理模式中的正斜杠-理论上它应该足以避免它,就像:
\/
但奇怪的是它不起作用)
不过这应该行得通

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

sed -i '\#^ *echo  + /etc>>\$BUFFER *$# a\
echo  - /etc/cache>>$BUFFER' YourFile
由于上述语句的(复制和粘贴)省略了第一个+符号之前的空格(可能是因为运行此网站帖子的软件中存在错误)-以下是复制时应能正常工作的版本:

sed-i'/echo\+\/etc>>$BUFFER/a echo-/etc/cache>>$BUFFER'myfile.txt

sed -i '\#^ *echo  + /etc>>\$BUFFER *$# a\
echo  - /etc/cache>>$BUFFER' YourFile
或者,如果你想避免在将来逃过一个前斜杠(在这种情况下不是很有用,因为它只有一个,但是如果你有很多前斜杠-同样奇怪的逃过的空间只是由于这个网站(或我的浏览器firefox)的软件中的一个BUG)如果在命令行中键入,则可以将间距设置为提问者问题中显示的两倍):

sed-i'\@echo\+/etc>>$BUFFER@aecho-/etc/cache>>$BUFFER'myfile.txt

sed -i '\#^ *echo  + /etc>>\$BUFFER *$# a\
echo  - /etc/cache>>$BUFFER' YourFile
  • 它将在每次出现
    echo+/etc>>$BUFFER
    后添加行
  • 我只是添加了行分隔符,以限制仅限于此确切的行内容(但可以有标题或尾随空格)

不清楚您的意思以及您的示例想要显示的内容。好了,我修改了我的原始帖子。您可能需要
a
命令的副本。查看@fedorqui的dup,直到有足够多的人将其关闭。如果您(复制并粘贴)文本,则最后一条语句(输入并显示)正确,它在+号之前缺少空格,可能是由于博客软件中的错误。