Grep, 경고 무시 싶습니다 . grep이 Permission

특정 패키지의 설치 디렉토리를 찾으려고합니다. 특정 파일을 찾으려고하는 특정 키워드가 있습니다.

grep 중에 cpp 또는 h 파일 형식 만 포함하고 싶습니다 . grep이 Permission Denied 또는 Could not found the Directory 와 같은 경고 를 표시하고 싶지 않습니다 . 일치하는 파일을 표시하고 싶습니다. 어떻게해야합니까?

현재 나는 사용하고있다

grep "My term" -ir --exclude-dir="\.svn" --include=*.{cpp,h} ./



답변

이러한 경고는 stderr표준 출력 파일 디스크립터와 달리 스트림으로 보내집니다. 2>/dev/null명령 끝에 추가하여 stderr 출력을 침묵시킬 수 있습니다 .


답변

경고를 필터링하는 것보다 다음을 추가하여 경고를 비활성화 할 수 있습니다 -s.

grep "My term" -sir --exclude-dir="\.svn" --include=*.{cpp,h} ./

이 옵션에는 호환성 문제가 있습니다. 그러나 이것은 개인적인 사용에는 문제가되지 않습니다.

-s, –no-messages : 존재하지 않거나 읽을 수없는 파일에 대한 오류 메시지를 표시하지 않습니다. 이식성 참고 사항 : GNU grep과 달리 7th Edition Unix grep은 -q가없고 -s 옵션이 GNU grep의 -q 옵션처럼 동작하기 때문에 POSIX를 준수하지 않았습니다. USG 스타일 grep에는 -q가 없지만 -s 옵션은 GNU grep처럼 동작했습니다. 이식 가능한 쉘 스크립트는 -q와 -s를 모두 피해야하며 대신 표준 및 오류 출력을 / dev / null로 리디렉션해야합니다. (-s는 POSIX에 의해 지정됩니다.)


답변

나는 다음과 같은 귀찮은 메시지를 얻었습니다.

grep: commands: Is a directory
grep: events: Is a directory
grep: views: Is a directory

그 이유는 --directories플래그가 기본값으로 설정되어 있기 때문입니다 read. 나는 그것을 바꿨다 recurse. 재귀 검색을 자동으로 수행하지 않으려면 skip대신 사용할 수 있습니다 .

이것을 항상 처리하는 가장 쉬운 방법은 환경 변수에서 설정하는 것입니다. 에서 ~/.bash_profile또는 ~/.bashrc당신의 배포판에 따라 :

export GREP_OPTIONS='--directories=recurse'

이제 grep을 사용할 때마다 해당 메시지가 자동으로 표시되지 않습니다.

또 다른 옵션은 --no-messagesshorthand 플래그 -s입니다. 또한 Is a directory메시지를 제거 하지만 더 유용한 다른 메시지는 표시하지 않습니다. 예를 들어, 중첩 검색을 수행 중이고 */*/*해당 패턴의 해당 파일이 존재하지 않으면이를 알려주지 않습니다.


답변

grep재귀 적 으로 수행하는 대신 대체 방법 -irfind명령 (기본적으로 재귀적임)이 -readable플래그를 사용하여 권한을 처리하고 플래그로 제외 -not -path "*.svn*"할 파일을 전달하는 것 grep입니다. -type f일반 파일 만 찾기 위해 디렉토리 제외를 수행 합니다.

$ find . -not -path "*.svn*" -type f -name "*.cpp" -or -name "*.h"  -readable -exec grep "my terms" "{}" \;


답변

특정 파일에서 재귀 검색을 수행 할 때는을 사용하는 것이 훨씬 좋습니다 ack-grep. 구문은 다음과 같습니다.

ack-grep -i "My term" --cpp --h

권한 오류 메시지를 제거하려면 다음을 사용하여 동일한 명령을 실행하십시오 sudo.

ack-grep -i "My term" --cpp --h

그러나 결국 설치된 패키지를 검색하려면 다음과 같은 다양한 옵션을 확인하십시오. https://www.google.com/search?q=ubuntu%20search%20inside%20installed%20packages


답변