【问题标题】:Not operator in regex [duplicate]正则表达式中的非运算符 [重复]
【发布时间】:2012-02-06 19:10:29
【问题描述】:

我有一个文件,我希望找出所有不以时间戳开头的行。我尝试使用以下正则表达式,但它不起作用:

cat myFile | grep '^(?!\[0-9\]$).*$'

任何其他建议或我可能在这里做错的事情?

【问题讨论】:

标签: regex bash shell grep


【解决方案1】:

为什么不简单地使用这样的 grep -v 选项来否定:

grep -v "<pattern>" file

假设您想 grep shell 脚本中所有 未注释(开始时没有 #)的行,那么您可以使用:

grep -v "^\s*#" file.sh

【讨论】:

  • 这里唯一的正确答案:不要试图否定模式,否定匹配结果。 +1
【解决方案2】:

您不需要not 运算符,只需使用 grep,因为它最容易使用:查找模式:

grep '^[0-9]' myFile

【讨论】:

    【解决方案3】:

    试试这个:

    cat myFile | grep '^\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d'
    

    这假设您的时间戳是dddd-dd-dd dd:dd:dd 模式,但如果它是其他内容,您可以将其更改为与您的时间戳匹配的时间戳。

    注意:除非您使用某种 cmd 链接,否则grep pattern file 是一种更简单的语法

    顺便说一句:您使用双重否定让我不确定您是想要时间戳行还是非时间戳行。

    【讨论】:

      猜你喜欢
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      相关资源
      最近更新 更多