我正在尝试找到一种方法来删除任何包含除我指定的字符之外的字符的行。例如,如果我指定字符a,e,i,o,u,r,s,t和我有一个单词列表
rat
tar
set
meow
然后应该从列表中删除“喵”,因为它包含字母“m”和“w”,我还没有确定。有什么想法吗?
答案 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