"grep"을 사용하여 지정된 세 문자를 순서에 관계없이 모두 포함하는 줄 찾기

"grep"을 사용하여 지정된 세 문자를 순서에 관계없이 모두 포함하는 줄 찾기

줄이 포함된 문서가 있고 순서에 관계없이 각 줄에 [a|b|c]가 적어도 한 번 나타나는지 찾아야 합니다.

예를 들어:

입력하다:

abc
bca
cab
hhfdhdhfabjfdjdjff
acjfdjdfjdf
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

원하는 출력(네 번째 줄은 a및 만 포함하고 포함 b하지 않으므로 존재하지 않습니다 c):

abc
bca
cab
fhfhfhfabcjdfjdjfk
ahfhfbkjfjdjffc

우리는 리눅스를 사용하고 있습니다.

답변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(펄 정규식) 범위.

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

설명하다:

  • ^줄의 시작과 일치합니다.
  • (?=.*a)일치시킬 문자열에 문자가 포함되어야 하는 경우에만a
  • (?=.*b)반드시 포함해야 함b
  • (?=.*c)반드시 포함해야 함c

관련 정보