【问题标题】:How to remove lines from text file not starting with certain characters (sed or grep)如何从文本文件中删除不以某些字符开头的行(sed 或 grep)
【发布时间】:2013-03-27 05:15:36
【问题描述】:

如何删除文本文件中不以字符#&* 开头的所有行?我正在寻找使用sedgrep 的解决方案。

【问题讨论】:

    标签: text sed grep


    【解决方案1】:
    sed -n '/^[#&*].*/p' input.txt > output.txt
    

    这应该可以。

     sed -ni '/^[#&*].*/p' input.txt
    

    这个会直接编辑输入文件,小心+

    【讨论】:

      【解决方案2】:

      删除行:

      grep

      来自http://lowfatlinux.com/linux-grep.html

      grep 命令从一个文件(或一堆文件)中选择并打印与某个模式匹配的行。

      我认为你可以这样做:

      grep -v '^[\#\&\*]' yourFile.txt > output.txt
      

      您也可以使用sed 做同样的事情(检查http://lowfatlinux.com/linux-sed.html):

      sed '^[\#\&\*]/d' yourFile.txt > output.txt
      

      由你决定


      过滤线:

      我的错误,我知道你想删除这些行。但如果你想“删除”所有其他行(或过滤以指定字符开头的行),那么grep 是要走的路:

      grep '^[\#\&\*]' yourFile.txt > output.txt
      

      【讨论】:

      • 先尝试一个表达式:grep -v '^#' yourFile > output。您可能需要转义字符:grep -v '^\#' yourFile > output
      • 但我需要保留以 & 或 * 或 # 开头的行,而不是删除它们。我想删除所有其他行。
      • @JonathanLeffler 进行了更正。是的,你是对的,一个命令解决了所有问题。感谢您的反馈
      【解决方案3】:
      egrep '^(&|#|\*)' input.txt > output.txt
      

      【讨论】:

      • 你能说得更具体点吗?你得到的输出是什么?
      • 错误 |也不例外。
      • 一般来说,使用字符类[&#*] 比您显示的替代更有效。如果您的 egrep 使用 DFA,则可能无关紧要。
      猜你喜欢
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 1970-01-01
      • 2019-12-21
      • 2013-08-18
      • 1970-01-01
      相关资源
      最近更新 更多