使用“grep”查找以任意顺序包含所有三个指定字符的行

使用“grep”查找以任意顺序包含所有三个指定字符的行

我们有一个包含行的文档,我们必须查找 [a|b|c] 是否在每一行中至少出现一次,无论顺序如何。

例如:

输入:

abc
bca
cab
hhfdhdhfabjfdjdjff
acjfdjdfjdf
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

所需的输出(第四行不存在,因为它只包含aandb但不包含c):

abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

我们正在使用Linux。

答案1

管道它:

grep a file | grep b | grep c

答案2

优点在这样的例子中sedgrep容易看出

sed -n '/a/{/b/{/c/p;};}' file

或者:

sed '/a/!d;/b/!d;/c/!d' file

答案3

awk '/a/ && /b/ && /c/' file

或者使用 grep (不过,它的扩展性不好):

grep -e 'a.*b.*c' -e 'a.*c.*b' -e 'b.*a.*c' -e 'b.*c.*a' -e 'c.*a.*b' -e 'c.*b.*a'  file

答案4

通过grep它接受-PPerl 正则表达式) 范围。

$ grep -P '^(?=.*a)(?=.*b)(?=.*c)' file
abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

解释:

  • ^匹配行的开头
  • (?=.*a)仅当要匹配的字符串必须包含字母时a
  • (?=.*b)必须包含b
  • (?=.*c)必须包含c

相关内容