我们有一个包含行的文档,我们必须查找 [a|b|c] 是否在每一行中至少出现一次,无论顺序如何。
例如:
输入:
abc
bca
cab
hhfdhdhfabjfdjdjff
acjfdjdfjdf
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc
所需的输出(第四行不存在,因为它只包含a
andb
但不包含c
):
abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc
我们正在使用Linux。
答案1
管道它:
grep a file | grep b | grep c
答案2
优点在这样的例子中sed
很grep
容易看出
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
它接受-P
(Perl 正则表达式) 范围。
$ grep -P '^(?=.*a)(?=.*b)(?=.*c)' file
abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc
解释:
^
匹配行的开头(?=.*a)
仅当要匹配的字符串必须包含字母时a
(?=.*b)
必须包含b
(?=.*c)
必须包含c