grep 명령에서 여러 AND 조합을 실행하려고 하는데 다음 두 가지 모드를 사용하여 실행할 수 있습니다.
grep -E 'pattern1.*pattern2' filename
위 방법을 사용하면 3~4개의 패턴을 사용할 수 있나요?
답변1
패턴의 순서가 고정되어 있으면 grep
다음과 같이 쉽게 사용할 수 있습니다.
grep -E 'pattern1.*pattern2.*pattern3'
그러나 모든 패턴이 존재해야 하고 어떤 순서로든 나타날 수 있는 경우 예를 들어 두 가지 패턴의 경우 조합이 복잡해집니다.
grep -E '(pattern1.*pattern2|pattern2.*pattern1)'
(세 가지 모드에 대해 이미 8가지 조합이 있습니다).
이 경우(즉, 를 사용하는 경우 ) 패턴당 하나의 인스턴스가 있는 파이프라인에서 호출을 계단식으로 배열하는 grep
것이 좋습니다 .grep
grep pattern1 <infile | grep pattern2 | grep pattern3
각 인스턴스는 해당 패턴과 일치하는 행만 필터링하며 전체 결과에는 모든 패턴이 있는 행만 포함됩니다.
가장 명확한 솔루션을 얻는 더 좋은 방법은 다음을 사용하는 것입니다 awk
.
awk '/pattern1/ && /pattern2/ && /pattern3/'
이와 같은 표현에서는 순서가 중요하지 않습니다.
답변2
예. 원하는 정규식을 구성하여 명령에서 패턴으로 사용할 수 있습니다 grep
. 유효한 정규 표현식이어야 합니다.