【问题标题】:Remove a Line With Brackets At Beginning删除开头带括号的行
【发布时间】:2019-05-05 22:31:34
【问题描述】:

我需要删除这样开头的一行:

[success] Total ....

我尝试了以下 sed 命令,但没有成功

sed '/\[/d' filename > newFile

但是当我 greped 新文件时,该行仍然存在!摆脱它的正确命令是什么

【问题讨论】:

  • 无法复制。这对我来说按预期工作。你在使用 gnu sed 吗?还是 macOS/Windows 上的其他版本?请注意,使用 gnu sed,您可以使用“-i”选项来覆盖文件(不处理备份):sed -i '/\[/d' filename
  • 不,我使用的是 Linux GNU sed。我不知道为什么它不起作用。该文件的大小为 10GB。也许它无法处理它
  • 据我所知,只有当文件中的行非常长时,sed 才会出现问题。对于其余部分,它会流式传输内容,因此文件大小应该不是问题。无论如何,如果它无法处理,你应该会得到一个错误。
  • wrt it didn't work - 永远不要只说那个。告诉我们它以何种方式不起作用(错误输出、无输出、错误消息、核心转储等)并发布任何错误消息。 edit 您的问题是要显示一个 minimal reproducible example,其中包括简洁、可测试的样本输入(目标行在上下文中)和预期输出以及您得到的实际输出

标签: sed


【解决方案1】:

如果您希望删除以某个模式开头的行,那么您应该在该模式的开头使用锚符号 (^):

sed -E '/^\[/d' filename > newFile

为了在模式的开头容纳由于缩进而常见的空格,您应该这样做

sed -E '/^[[:blank:]]+\[/d' filename > newFile

GNU sed 有一个通过-i 选项实现的就地编辑选项,所以上面可以替换为

sed -Ei '/^[[:blank:]]+\[/d' filename

似乎sedno limits 有关文件大小,但对于大文件来说通常很慢。

【讨论】:

  • + 不能在没有-E 的情况下工作,这是一个 GNU 扩展。即使你逃避它,它也不是 POSIX BREs 的一部分
  • @oguzismail 我只使用过 GNU sed,我经常忘记其他版本。你有一定道理。谢谢。
【解决方案2】:

要删除以 [ 开头的行,我们可以使用这个 sed 模式

$ sed -E '/^\s*\[/d' filename

说文件 data3.txt 有这个内容:

$ cat data3.txt
dont remove this line
[success] faile ... remove this line
[hola to be removed
[hola] remove this
 [hola]  remove this
[] remove thisline
this [success] Total dont remove this

您可以运行此命令,该命令在开头处理空白/制表符/空格等,后跟 [ 和其他文本数据:

$ sed '/^\s*\[/d' data3.txt
dont remove this line
this [success] Total dont remove this

这里

'/^\s*\[/d' : takes care of [ preceded by zero or more occurrences of space/tab etc.

【讨论】:

  • 据我了解,-E/-r*[] 没有影响,但仅对 ?,+,{,} 和 @ 有影响987654333@。在 GNU sed 中,后一个列表可以通过在每个列表前面加上 `\` 来实现特殊,而不需要前一个选项。
  • @potong 你是对的,-E 对 * 没有影响。编辑了我的答案。感谢您的指出。
【解决方案3】:

使用grep:

grep -v '^[[]' file

为了匹配[,我通常把它放到一个字符类中:

[]  # empty character class
[[] # character class with [ as the only item

顺便说一句:如果行首允许有可选空格:

grep -v '^[[:blank:]]*[[]' file

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 2020-04-09
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多