grep 표현을 뒤집는 방법


237

다음 grep 표현식은 현재 디렉토리 및 서브 디렉토리의 모든 .exe 및 .html 파일을 나열합니다.

ls -R |grep -E .*[\.exe]$\|.*[\.html]$  

이 결과를 뒤집어 .html 또는 .exe가 아닌 결과를 어떻게 표시합니까? (그렇습니다 !=.)

답변:


337

사용 명령 줄 옵션 -v이나 --invert-match,

ls -R |grep -v -E .*[\.exe]$\|.*[\.html]$

4
주목해야한다 -v/ --invert-match필요의 리턴 코드가 있는지 플립하지 않습니다 grep성공적인 실행을 나타내고, 대신 다른 일치하지 않을 선을 일치합니다. 리턴 코드를 반전시키려는 경우 (즉, 모든 행이 하나 이상의 패턴이 아닌 패턴과 일치하지 않으면 성공)를 사용해야합니다 ! grep. 조건부 표현식에서 사용됩니다 (예 :) if ! ls | grep -qE ".(\.exe)$"; then echo No .exe files in $(pwd); fi.
Zyl

98
grep -v

또는

grep --invert-match

다음을 사용하여 동일한 작업을 수행 할 수도 있습니다 find.

find . -type f \( -iname "*" ! -iname ".exe" ! -iname ".html"\)

자세한 내용은 여기를 참조하십시오 .


2
find명령은이 XY 문제에 대한 가장 의미있는 솔루션입니다. 결합 ls하고 grep이 목적을 위해하는 최고의 해키 보인다. 이것이 정답입니다. (+1)
Eric Seastrand

4
@Eric OP의 요구 사항에 관계없이 grep 표현을 뒤집는 것은 파일을 찾는 것보다 훨씬 유용합니다. 나는 그것이 대부분의 사람들이 여기 온 이유를 의심한다.
byxor



7

여러 번 언급했듯이 반전 -v옵션 은 옵션으로 수행됩니다 grep. grep도움말 텍스트를 통해 스스로 알아낼 수 있다는 (유쾌하게) 참고 사항을 추가하겠습니다 .

grep --help | grep invert

-v, --invert-match 비 일치 행 선택

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.