【问题标题】:How To Use SED Command To Insert A Line Before A Pattern Match如何使用 SED 命令在模式匹配之前插入一行
【发布时间】:2019-02-26 03:44:12
【问题描述】:

运行命令后sed -i "/class MySQLPagedResultsajax/i Thing I Wish To Add;" /File/Location/

我得到的结果如下:

Thing I Wish To Add;class MySQLPagedResultsajax 

而我想实现这一点:

Thing I Wish To Add;
class MySQLPagedResultsajax 

请帮忙,因为我想要一个单行命令解决方案,因为这需要在多个文件上完成,我将使用 Excel 为每个文件创建单独的命令。

【问题讨论】:

  • 这很奇怪,我无法重现它,i 应该插入一个适当的单独行(参见GNU sed manual)。您使用的是什么版本的 sed?
  • GNU sed 版本 4.2.1 版权所有 (C) 2009 Free Software Foundation, Inc. 这是免费软件;查看复制条件的来源。没有保修;在法律允许的范围内,甚至不用于适销性或特定用途的适用性。 GNU sed 主页:gnu.org/software/sed>。使用 GNU 软件的一般帮助:gnu.org/gethelp>。将错误报告通过电子邮件发送至:。请务必包含单词sed'' somewhere in the Subject:'' 字段。
  • 我想要一个单行命令解决方案,因此这不是重复的

标签: linux unix sed


【解决方案1】:

试试这个:

sed -i '/class MySQLPagedResultsajax/s/^/Thing I Wish To Add;\n/'

或者在你确定之前,先试试这个并检查控制台上的输出:

sed -e '/class MySQLPagedResultsajax/s/^/Thing I Wish To Add;\n/'

ssubstitute 命令。
^ 表示行首。
\n 换行。

【讨论】:

  • 我运行了它,结果仍然是我希望添加的东西;class MySQLPagedResultsajax
  • @RishiSachdeva 我需要确认这一点:您想要在Thing I Wish To Add; 之后、class 之前换行,对吗?您是否还在另一个环境中使用这些命令,而不是直接在 bash/shell 中?请尝试生成minimal reproducible example
【解决方案2】:

只需将 awk 用于除简单的 s/old/new 之外的任何内容:

awk '/class MySQLPagedResultsajax/{print "Thing I Wish To Add;"} 1' file

添加 -i inplace 以使用 GNU awk 进行伪就地编辑,就像您可以通过添加 -i 使用 GNU sed 进行伪就地编辑一样。

【讨论】:

  • 我不能使用 -i,因为我没有使用最新版本的 awk,所以我将输出移动到一个临时文件,但结果仍然是我希望添加的相同的东西;类 MySQLPagedResultsajax跨度>
  • 那么您的输入或代码中有某种控制字符,或者您正在做其他事情来阻止打印换行符。使用cat -v 查看控制字符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-18
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
相关资源
最近更新 更多