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

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

rat tar set meow 

然后,“喵”应该从列表中删除,因为它包含字母“m”和“w”,我没有好的。 有任何想法吗?

或者你可以这样做:

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

该模式匹配包含未在列表中指定的任何字符的行。 这在grep手册页中有明确的解释:

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

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

-v,–invert-match
颠倒匹配的意义,选择不匹配的行。 (-v由POSIX指定)。

这应该为你做。 它有你在一个集合中指定的字母,用[]括起来。 *表示可以发生多次。 ^表示行必须以其中一个字母开头, $表示它也必须以此结束。

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