如何找到匹配模式的行并删除它们?

mic*_*imo 17 command-line text-processing

在有很多行的文件中,我想删除以HERE IT IS.

如何仅使用命令行工具执行此操作?

hee*_*ayl 31

尝试sed

sed -i '/^HERE IT IS/d' <file>
Run Code Online (Sandbox Code Playgroud)

警告:最好在使用以下-i开关时进行备份sed

sed -i.bak '/^HERE IT IS/d' <file>
Run Code Online (Sandbox Code Playgroud)

原始文件将保持原样<file>.bak,修改后的文件将是<file>.

  • @micgeronimo 尝试在原始问题中提出您真正想要回答的问题(请记住,您可以对其进行编辑),而不是通过可能被清理/删除的评论。你可以使用`sed'/^HERE IT IS/G'文件`。 (6认同)
  • `sed -i 's/^这里/这里\n/' &lt;文件&gt;` (2认同)

ter*_*don 20

除了很好的grepsed聪明的你已经收到了,这里有一些其他的工具可以做同样的事情:

  • @OlivierDulac 我可以向你保证,如果我在 [unix.se] 上发帖,我会使用 printf、IFS=、-r 和引用:)。我经常为通常不太熟悉命令行的 AU 观众简化事情。 (2认同)

小智 13

我会grep用来过滤掉它们。例如 :

grep -v "^HERE IT IS" infile > outfile
Run Code Online (Sandbox Code Playgroud)

然后将 outfile 移回 infile。


Arr*_*cal 5

sed 绝对是要走的路。

由于模式引用中的 I ,对@heemayl 命令的这种轻微修改给了您删除该行,无论模式中是否使用相同的大小写。

sed -i '/HERE IT IS/Id' <file>
Run Code Online (Sandbox Code Playgroud)

如果您想在一个目录中有多个文件,您可以像这样将它与 find 结合起来。

find . -maxdepth 1 -type f -exec sed -i.bak '/HERE IT IS/Id' {} +
Run Code Online (Sandbox Code Playgroud)

maxdepth 选项意味着这不会递归到目录中。