sed不会取代gedit可以理解的模式

时间:2018-09-04 16:07:28

标签: regex sed

我需要从1000个文件中删除一些内容,后跟5个连字符(在单独的行中)。基本上看起来像这样:

  

某些内容
  -----
  上面有5个HYPHENS会删除某些内容

我已经尝试使用this解决方案来做到这一点,但对我而言却无效:

  • 此命令-sed '/-----/,$ d' *.txt -i-无法使用,因为其中一些文本的行中带有超过5个连字符;
  • 此命令-sed '/^-----$/,$ d' *.txt -i-导致所有文件均未更改)。

所以我发现这可能与“ ^”和“ $”字符有关,但是老实说,我既是sed又是RegEx新手,我不知道这是什么问题。

我还发现,此RegEx — ^-{5}$(\s|\S)*$ —仅用于捕获完全以5个连字符开头的这些块,但是将其放入sed命令中则没有效果(连字符和后面的文本都保留) ,它们在哪里)。

关于sed,我可能不太了解,因为当我将上述表达式与gedit的 Find&Replace 一起使用时,它可以正常工作。但是我不想手动打开,更改和保存1000个文件。

我还是在问这个问题,因为给定的解决方案(上面的链接)对我没有帮助。

我发布的第一个命令(sed /-----/,$ d' *.txt -i)也导致删除了某些文件的全部内容,例如,一个文件有5个连字符,换行符处有一个空格(没有更多文本)。它的底部:

  

某些内容
  -----
  单空格

编辑:

是的,我在这里忘记了',但是在终端机中我将其与这些命令一起使用了。

是的,这些文件以\ n或\ r结尾。有解决方案吗?

3 个答案:

答案 0 :(得分:1)

$ sed  '/^-----/p;q' file
SOME CONTENT

$ sed -E '/^-{5}/p;q' file
SOME CONTENT

答案 1 :(得分:1)

我想你想要这个:

 sed '/^-\{5\}/,$ d' *.txt -i

请注意,{}需要转义。

答案 2 :(得分:1)

您是否只是在尝试从-----自己的行(可能以\ r结尾)中删除到文件末尾?那应该是:

awk '{print} /^-----\r?/{exit}' file

以上内容将在所有UNIX系统中的所有shell中使用所有awks进行工作。