2013-12-16 39 views
1

我试图使用grep来匹配列表中的特定单词。 假设列表包含联盟和与grep的区别

aa 
der 
bb 
abc ref 

如果我的理解是正确的,(我想这使用grep -E)

cat file | grep '[a-z&&[^m-r]]' 

应该返回

aa and bb 

(所有字母匹配从到z,除了m到r)。但我什么都没有。在这里失踪了吗?

+0

请描述你想匹配的模式。 – Marc

+0

除m到r以外的a-z之间的任何字母/单词。 –

+0

正则表达式中没有交点运算符。如果存在,它可能是单个(不是双精度)'&',但操作符无论如何都不能在字符类中使用。 – tripleee

回答

1

您可以使用负向预览。他说:

grep -P '^[a-z](?!.*[m-z])' filename 

将返回

aa 
bb 

您的输入。

+0

为什么这么复杂?我对这个要求的解释会提示'^ [a-ls-z] * $'。 – tripleee

1

你可以使用-v开关只是反转的grep匹配:

cat myfile.txt | grep -v '[m-r]' 

或者不包括管道:

grep -v '[m-r]' myfile.txt