如何否定正则表达式中的两个特定单词?

时间:2016-10-20 11:00:08

标签: regex sed grep

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

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'后的单词。该文件还包含其他单词unhypated,我必须保持(如“keresztül”,“kod”.....)。

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

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

2 个答案:

答案 0 :(得分:1)

Perl的环顾四周断言可能会简化解决方案:

perl -Mutf8 -CS -ne 'print unless /-(?!k[eé]nt)/' < file
  • -Mutf8在源代码中启用UTF-8(即使é在正则表达式中工作)
  • -CS打开UTF-8输入和输出
  • 正则表达式说:kentként
  • 未跟踪

答案 1 :(得分:1)

使用grep,您可以:

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

RegEx Demo

这会找到以kentként结尾的带连字符的字词或没有连字符的字词。