【问题标题】:SED insert new line after patternSED 在模式后插入新行
【发布时间】:2014-11-04 04:04:50
【问题描述】:

我有包含以下行的脚本:

   echo  + /etc>>$BUFFER

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

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

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

【问题讨论】:

  • 不清楚你的意思以及你的例子想要展示什么。
  • 好的,我修改了我原来的帖子。
  • 您需要a 命令。查看@fedorqui 的 dup,直到有足够多的人将其关闭。

标签: sed


【解决方案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

或者如果您想避免将来转义单个前斜线(在这种情况下并不是很有用,因为它只有一个,但是如果您有很多前斜线 - 再次奇怪的转义空间只是由于本网站的软件(或我的浏览器 firefox)如果您在命令行上键入它,您可以自己将间距加倍,因为它出现在提问者的问题中):

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

【讨论】:

  • 最后一条语句是(输入并显示)正确,但如果您(复制和粘贴)它在 + 号之前缺少一个空格的文本,可能是由于博客软件中的错误。
【解决方案2】:
sed -i '\#^ *echo  + /etc>>\$BUFFER *$# a\
echo  - /etc/cache>>$BUFFER' YourFile
  • 它会在每次出现echo + /etc>>$BUFFER 之后添加一行。
  • 我只是添加了行分隔符以限制仅此确切的行内容(但可能有标题或尾随空格)

【讨论】:

    【解决方案3】:

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

    sed 's/echo \+ .*etc>>\$BUFFER/echo + \/etc>>\$BUFFER\necho - \/etc\/cache>>\$BUFFER/'
    

    这可能不是最好的解决方案(我不确定如何处理模式中的正斜杠 - 从理论上讲它应该足以逃避它:\/ 但奇怪的是它不起作用)
    这应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多