파이프 출력을 grep할 수 없습니다.

파이프 출력을 grep할 수 없습니다.

ripgrep을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

ps aux | rg 'process name'

이전 명령의 출력을 검색할 수 있습니다. 어떤 이유로 이것은 일반을 사용하여 작동합니다 grep.

ps aux | grep 'process name'

그것은 내가 grep으로 파이프하려는 것을 무시하고 내가 입력한 프로세스에 대해 현재 작업 디렉토리를 검색합니다.

이것은 ps aux의 출력입니다: PS 보조 출력

예를 들어, Firefox를 grep하면 표시되지 않습니다.

ps aux | rg firefox나에게 이것을 주었다: ps aux 및 rg

편집: 이는 여기에 설명된 일종의 앨리어싱 때문인 것 같습니다.https://unix.stackexchange.com/a/500727/375504

이것은 작동합니다:ps aux | \grep firefox

답변1

당신은 당신이 사용할 때 말한다ps aux | grep 'process name' 그것은 ( grep) 내가 grep으로 파이프하려는 것을 무시하고 현재 작업 디렉토리를 검색합니다..

당신도 썼어요grep의 별칭은 다음과 같습니다.grep -nRi.

grep( )에 대한 문서를 보면 플래그가 설명하는 것과 정확히 일치하는 man grep것을 볼 수 있습니다 .-R

-r, --recursive명령줄에 있는 경우에만 심볼릭 링크를 따라 각 디렉터리 아래의 모든 파일을 반복적으로 읽습니다. [...]

그리고

-R, --dereference-recursive각 디렉터리의 모든 파일을 재귀적으로 읽습니다. 모든 심볼릭 링크를 따르십시오.-r

GNU grep의 경우 grep -r파일 이름 인수가 제공되지 않으면 기본값은 현재 디렉터리에서 시작됩니다. 일부 다른 버전의 grep은 이를 수행하지 않지만 stdin을 읽는 동안 "stdin의 재귀 검색"에 대해 경고할 수 있습니다.

grep해결책은 다른 이름과 함께 별칭을 사용하지 않는 것입니다 . 특정 기능이 필요한 경우 새 별칭을 만듭니다( rgrep예를 들어 여기서는 대안이 될 수 있음).

답변2

내 문제는 bash aliases 에 별칭을 추가했다는 것입니다 grep. grep -nRi $*별칭이나 통화를 제거하면 \grep문제가 해결될 수 있습니다.

관련 정보