나는 다음과 같은 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
반대 등 다른 것들은 다를 수 있습니다.)