논리 연산자로 grep 검색을 수행 할 수있는 grep 유사 유틸리티가 있습니까? 논리 구조를 자유롭게 중첩하고 결합 할 수 있기를 원합니다. 예를 들어 다음과 같은 것이 가능해야합니다.
grep (term1 && term2) || (term1 && (term3 xor term4)) *
나는 이것이 바닐라 grep과 추가 bash 스크립팅으로 수행 할 수 있다는 것을 알고 있지만, 나의 목표는 그렇게하지 않는 것입니다.
논리 연산자로 grep 검색을 수행 할 수있는 grep 유사 유틸리티가 있습니까? 논리 구조를 자유롭게 중첩하고 결합 할 수 있기를 원합니다. 예를 들어 다음과 같은 것이 가능해야합니다.
grep (term1 && term2) || (term1 && (term3 xor term4)) *
나는 이것이 바닐라 grep과 추가 bash 스크립팅으로 수행 할 수 있다는 것을 알고 있지만, 나의 목표는 그렇게하지 않는 것입니다.
답변:
grep
논리 연산자와 함께 사용 하는 방법은 많이 있습니다 .
OR 조건에 \|
대해 여러 패턴을 분리하는 데 사용하십시오
.
예: grep 'pattern1\|pattern2' filename
OR
조건에 -E
대해 여러 패턴을 보내 려면이 옵션을 사용하십시오 .
예: grep -E 'pattern1|pattern2' filename
단일을 사용하면 -e
하나의 패턴 만 일치하지만 여러 -e
옵션을 사용하면
둘 이상의 패턴과 일치합니다.
예: grep -e pattern1 -e pattern2 filename
grep -v
NOT 연산을 시뮬레이션 할 수 있습니다 .
에 AND 연산자 가 없지만 옵션 을 사용하여 grep
시뮬레이션 AND 를 무차별화할 수 있습니다 -E
.
예 : grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
위의 예는 pattern1 과 pattern2 를 모두 포함하는 모든 줄을 순서대로 일치시킵니다 .)
grep foo | grep bar
AND를 수행하는보다 일반적인 방법입니다.
sed '/term1/!d;/term2/b' -e '/term3/!d;/term4/d' *
나는 그것이 당신이하려는 일을 성취한다고 믿습니다. 그것은 d
출력과 일치하지 않는 선에서 eletes term1
는, b
스크립트 밖으로 목장 (및 autoprints 때문에) 어떤 라인이 남아 그 일치 term2
와 일치하지 않는 하나를 삭제 남아 라인 term3
과 일치 할 것과 어떤에서 term4
.
sed
스크립트는 순서대로 평가되며 모든 테스트는 부울이므로 테스트로 인한 모든 작업은 다음 작업의 동작에 직접 영향을 미칩니다.
-E
아니 아주 동일하다&&
는 주문 민감하다는 사실에 기인