grep이 전체 디렉토리를 검색하지만 한 파일 내의 일치 항목을 무시하는 방법이 있습니까?
내가 사용하는 명령은 다음과 같습니다.
grep -rn 'SearchTextHere'
무시해야 할 파일의 파일 이름이 =
.
예, 파일 이름은 단지 등호일 뿐입니다. 응, 나도 이해가 안 돼.
(거기에 있어야 하는지 확실하지 않으므로 직접 삭제할 수 없습니다. 실수로 파일에 대한 grep 파이핑이나 그와 유사한 것은 아닌 것 같습니다.)
그렙 버전 3.4
답변1
=
다음과 같은 경우에 발생할 수 있습니다. - 명명된 파일:
[ a >= b ]
또는:
expr a >= b
틀렸습니다. 왜냐하면 이것은 본질적으로 동일하기 때문입니다.
[ a b ] > '='
expr a b > '='
즉, 이러한 [
또는 expr
명령을 실행하고 출력을 로 리디렉션합니다 =
. >
이는 쉘 구문의 리디렉션 연산자이므로 >
인용되어야 합니다.
expr a '>=' b
[ a '>=' b ]
( 연산자 의 내장 기능을 [
지원하는 구현은 거의 없지만 >=
; )yash
[
=
파일이 비어 있는 경우 이것이 가능한 설명 중 하나입니다.
=
이제 GNU의 재귀 검색에서 호출된 모든 파일을 제외하려면 grep
다음을 사용할 수 있습니다.
grep -rn --exclude== SearchTextHere .
또는:
grep -rn --exclude = SearchTextHere .
--exclude-from
파일의 제외 목록을 제공하려는 경우 유용합니다. 여기서는 다음과 같이 할 수 있습니다.
echo = | grep --exclude-from=/dev/stdin -rn SearchTextHere .
를 사용하는 것보다 이것이 더 좋습니다 --exclude
.
어쨌든, 현재 디렉토리에 있는 파일만 제외하도록 GNU에 지시할 수 있는 방법은 없습니다 grep -r
(그리고 다른 하위 디렉토리에 있는 파일은 계속 검색합니다). 이렇게 하려면 파일 찾기 및 제외를 사용하여 파일의 텍스트를 검색하도록 호출할 수 있습니다. 이는 표준 옵션이 아닙니다.=
=
find
=
grep
-r
grep
find . ! -path './=' -type f -exec grep -n SearchTextHere /dev/null {} +
(추가된 /dev/null
보증은 파일이 하나만 발견 grep
되더라도 항상 파일 이름을 인쇄합니다 . GNU에서는 이 옵션을 사용할 수도 있습니다 .)find
grep
-H
또는 건너뛰기목차통화 =
및 그 안에 있는 모든 파일(이것은 grep --exclude =
작동하지 않음):
find . -name = -prune -o -type f -exec grep -rn /dev/null {} +
(여기서 건너뛰세요.어느파일/디렉토리 이름은 현재 디렉터리의 디렉터리 만 건너뛰기 =
위한 것입니다 .-path ./=
=
답변2
Steeldriver의 의견 제안이 작동하는 것 같습니다.
grep -rn 'SearchTextHere' --exclude==
아니면 일반적인 파일 이름은 다음과 같습니다.
grep -rn 'SearchTextHere' --exclude=FileToIgnore
매뉴얼 페이지에서 "--exclude-from"을 사용하려고 합니다. 그게 무엇을 위한 것인지 모르겠습니다.