grep - 删除包含指定字符以外的任何内容的行

时间:2012-01-20 17:10:31

标签: linux grep

我正在尝试找到一种方法来删除任何包含除我指定的字符之外的字符的行。例如,如果我指定字符a,e,i,o,u,r,s,t和我有一个单词列表

rat
tar
set 
meow 

然后应该从列表中删除“喵”,因为它包含字母“m”和“w”,我还没有确定。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

或者你可以这样做:

$ grep -v '[^aeiourst]' file.txt
rat
tar
set

模式匹配包含列表中未指定的任何特征的行。 grep手册页中明确说明了这一点:

  

括号表达式是由[和]括起来的字符列表。它匹配该列表中的任何单个字符;如果列表的第一个字符是插入符号^那么它匹配列表中没有的任何字符。例如,正则表达式[0123456789]匹配任何单个数字。

除此之外,您想要的是删除与该模式匹配的行,使用-v/--invert-match选项。这在grep手册页中也有很好的解释:

  

-v, - invert-match
  反转匹配感,选择不匹配的线条。 (-v由POSIX指定。)

答案 1 :(得分:0)

这应该为你做。它包含您在集合中指定的字母,由[]括起来。 *表示它们可以发生任意次。 ^表示该行必须以其中一个字母开头,$表示它必须以其结尾。

grep '^[aeiourst]*$' file.txt