【问题标题】:How to negate two specific word in regex?如何否定正则表达式中的两个特定单词?
【发布时间】:2016-10-20 11:00:07
【问题描述】:

我有一个包含单词的文件,例如这些。

Good ones words:

művész-ként
luisz-ként
gravid-ként
chips-ként
bizottság-kent
Pannon-ként
Nagyostobafalva-kent

Words to remove:

font-size
line-height
X-Faktor
Calais-nál

我需要的是删除包含连字符的单词,并且连字符后面的单词不是“ként”或“kent”。该文件还包含我必须保留的其他未连字符的单词(例如“keresztül”、“kod”.....)。

这可以,但也可以消除不包含连字符的单词。

grep -vE "\w+-(kent|ként)     " file.txt

【问题讨论】:

  • 可能是grep P "\w+-(?!kent|ként)" file.txt?
  • @WiktorStribiżew 这不起作用。

标签: regex sed grep


【解决方案1】:

Perl 的环视断言可能会简化解决方案:

perl -Mutf8 -CS -ne 'print unless /-(?!k[eé]nt)/' < file
  • -Mutf8 在源代码中打开 UTF-8(即使 é 在正则表达式中工作)
  • -CS 为输入和输出打开 UTF-8
  • 正则表达式表示:kentként 后面的破折号 未遵循

【讨论】:

    【解决方案2】:

    使用grep,您可以:

    grep -E '^(\w+-k[eé]nt|[^-]*)$' file
    

    RegEx Demo

    这将找到以kentként 结尾的连字符或不带连字符的单词。

    【讨论】:

    • 我也用 grep 面对issue。你能看看吗?
    猜你喜欢
    • 2020-04-20
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2022-01-23
    • 2021-04-20
    • 1970-01-01
    • 2021-04-20
    相关资源
    最近更新 更多