【问题标题】:grep character not followed by charactergrep 字符后面没有字符
【发布时间】:2016-04-22 03:33:09
【问题描述】:

我正在尝试打印文件中 b 后面没有 e 的行。我尝试使用负前瞻,但它不起作用。

 grep  'b(?!e)' filename
 grep '(?!e)b)' filename
 egrep  'b(?!e)' f3.txt

当我运行这些命令时,什么都没有显示,没有错误或其他任何东西。我也查看了其他人的类似帖子,但无法运行。

【问题讨论】:

  • grep "b[^e]" filename.txt 可以吗?或者在 Linux 上使用 '。如果你使用grep -E 来扩展正则表达式支持呢?
  • 从这个线程stackoverflow.com/a/9198987lookarounds 在标准 grep 中不受支持,但在 GNU grep 中,grep -P 可能使用 Perl 兼容的正则表达式并支持它。

标签: linux unix grep negative-lookahead


【解决方案1】:

grep -E 'b([^e]|$)' filename

这应该匹配 'b' 后跟一个不是 'e' 的字符,或者在行尾匹配 'b'。

【讨论】:

    【解决方案2】:

    如果您的 grep 支持带有 -P 的 Perl 正则表达式,则可以使用环视:

    $ grep -P 'b(?!e)' <<< 'be'     # Gets no output
    $ grep -P 'b(?!e)' <<< 'bb'
    bb
    $ grep -P 'b(?!e)' <<< 'b'
    b
    

    grep -E(在这种情况下)的唯一区别是您不必处理行尾情况(请参阅pilcrow's answer)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2021-11-17
      • 1970-01-01
      相关资源
      最近更新 更多