grep이 일치하지 않고 일치하지 않음 [중복]

grep이 일치하지 않고 일치하지 않음 [중복]

나는 다음과 같은 grep을 가지고 있습니다

grep -r --color -L "class public interface" * | grep "authenticate"

"클래스 공용 인터페이스"는 포함하지 않지만 파일의 어느 곳에나 "인증"을 포함하는 모든 파일을 다시 가져오고 싶습니다.

하지만 내가 가진 것이 예상대로 작동하지 않습니다. "클래스 공용 인터페이스"는 포함되어 있지 않지만 "인증"은 포함되어 있기 때문에 파일이 있어야 한다는 것을 알고 있습니다.

내 주문에 문제가 있나요?

답변1

-L일치하지 않는 파일 콘텐츠를 검색하는 것처럼 일치 -l하는 파일 콘텐츠도 검색합니다.

-l따라서 두 번째 "grepping"에서 플래그를 지정 해야 합니다 .

grep또한 첫 번째 출력을 명령줄 인수로 두 번째 출력으로 지정해야 합니다 . 이는 xargs표준 입력에서 항목을 읽는 도구인 를 사용하여 수행할 수 있습니다. 파일 이름을 직접 파이핑하면 두 번째 grep이 authenticate파일에서 문자열을 찾게 됩니다.이름.

그래서 당신은 다음과 같은 것을 얻어야합니다

grep -r --color -L "class public interface" * | xargs grep -l "authenticate"`

입력 은 xargs기본적으로 모든 공백으로 분할되므로 파일 이름에 공백이 있는 경우(또는 더 나쁜 경우) NUL 바이트로 구분된 파일 이름을 grep -Z사용해야 합니다. xargs -0(GNU grep의 경우가 그렇습니다. FreeBSD grep의 --null반대 등 다른 것들은 다를 수 있습니다.)

관련 정보