grep은 별칭이 "grep -R"인 경우 파이프를 무시합니다.

grep은 별칭이 "grep -R"인 경우 파이프를 무시합니다.

grep 검색의 출력을 다른 grep의 입력으로 연결하려고 합니다. 예를 들어:

grep search_query * | grep -v but_not_this

그러나 두 번째 grep은 이전 검색의 출력을 사용하지 않습니다. 두 번째 grep은 대신 *를 사용하는 것 같습니다. 예를 들어,

grep lcov *                                                                                          
tst/bits/Module.mk:21:$(call func_report_lcov)
tst/drivers/Module.mk:27:$(call func_report_lcov)

하지만 "call"이 포함된 결과를 필터링하려면

grep lcov * | grep -v call
...

나를 잡아줘내 작업 공간의 모든 행"전화"를 포함하지 않습니다.

환경 정보:

  • 이것은 bash와 Fish 모두에서 발생합니다.
  • 아래와 같이 grep 명령에 대한 별칭을 설정했습니다.alias grep='grep -nR --color=always'

내가 놓친 다른 것이 있습니까?

답변1

앨리어싱이 그 이유입니다. 에서 man grep-R옵션을 사용하면 grep"각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다". 따라서 파이프 다음 부분은 첫 번째 출력을 무시하고 grep대신 grep현재 디렉터리에서 모든 파일을 반복적으로 반복합니다.

별칭을 우회하고 바닐라 grep 및 \grep.

grep lcov * | \grep -v call

그러나 개인적으로 -R별칭을 입력하는 것이 혼란스럽다고 생각합니다.

답변2

흥미로운. 이것나타나다세부 사항은 말 그대로 악마처럼 보입니다.

grep "search_query" *

가능한와는 다르다

grep search_query *

어느가능한그리고 다른

grep 'search_query' *

이 시도:

grep search_query * > /tmp/foo
grep -v but_not_this /tmp/foo

파일에 /tmp/foo원하는 내용이 포함되어 있나요? 원하는 답을 얻었
나요 ? unalias 로 바꾸고 작동하는지 확인하십시오. grep -v but_not_this
grep\grep

관련 정보