我需要从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结尾。有解决方案吗?
答案 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进行工作。