Ubuntu-18.04.6의 'grep' 명령에 어떤 문제가 있나요?

Ubuntu-18.04.6의 'grep' 명령에 어떤 문제가 있나요?

나는 수십 년 동안 'grep'을 즐겼지만 몇 년 후 Linux를 떠났다가 다시 돌아왔을 때 'grep'이 이전과 다르게 작동하는 것을 발견했습니다. 웹에서 사용량을 확인하고 메모리가 손상되지 않았는지 확인했습니다.

*.h일부 및 파일은 더 깊은 하위 디렉터리에 있다고 확신합니다 *.cpp. 아래 명령을 사용했는데 예상치 못한 비슷한 결과가 나왔습니다.

grep 44738 -r -l *.h
grep 44738 -r -l *.c
grep 44738 -r -l *.c*

나는 결과를 얻었다

 grep: *.h: No such file or directory
 ./daemons/snmpcd/snmpcd.cpp
 ./.svn/pris.......svn-base

 grep: *.c: No such file or directory
 ./daemons/snmpcd/snmpcd.cpp
 ./.svn/pris.......svn-base

 grep: *.c*: No such file or directory
 ./daemons/snmpcd/snmpcd.cpp
 ./.svn/pris........svn-base

각기.

  • command: 을 사용하면 grep 44738 -r -l .첫 번째 줄을 제외하고 동일한 결과를 얻었습니다.grep: ...
  • command: 를 사용하면 파일이 grep 44738 -r -l *.c*전혀 없습니다 grep: ....
  • 명령을 사용한 경우 grep 44738 -r -l -file *.c* .:grep: *.c*: No such file or directory

결과는 몇 년 전의 내 경험과 거의 반대입니다. 내 질문은 다음과 같습니다

  1. ubuntu-18.04.6에 많은 변화가 있었나요 grep?
  2. grep에서 파일 패턴을 어떻게 지정합니까? 몇 년 전에 했던 것처럼 왜 *.c같은 패턴을 사용할 수 없나요 ?*.h *.c*
  3. 동료가 를 사용하라고 제안했지만 ack거의 같은 것을 발견했습니다. grep이전 처럼 전역 문자열 검색을 하려면 어떤 명령을 사용해야 합니까 ?

답변1

여기에는 두 가지 문제가 있습니다. 첫째, -r또는 플래그를 결합할 수 없으며 -R대상 파일 이름을 인수로 제공할 수도 없습니다. -r/ 는 -R"주어진 디렉터리의 모든 파일 검색"을 의미하는 재귀 검색을 활성화하여 grep해당 인수를 파일을 찾을 디렉터리로 처리하게 합니다. 이름이 glob과 일치하는 디렉터리가 없기 때문에 *.c*오류가 발생합니다. 보여주다. 내가 기억하는 한, 적어도 거의 25년 동안 Linux를 사용해 온 이래로 이런 일이 항상 있었습니다.

-r/ 플래그 를 사용하지 않으면 원하는 대로 glob을 사용할 수 있습니다 -R.하지만인용해야 합니다. 이것이 필수적입니다. 인용하지 않으면, glob은 쉘에 의해 일치하는 파일로 확장되고 grepglob은 표시되지 않고 쉘 확장의 결과만 표시됩니다. 이름이 glob과 일치하는 현재 디렉터리입니다.

이제 grepLinux의 기본값인 GNU에는 원하는 작업을 수행할 수 있는 방법이 있지만 구문은 다릅니다.

grep 44738 -r -l --include='*.h'

보다 man grep:

  --include=GLOB
          Search only files whose base name matches GLOB (using  wildcard
          matching  as  described  under  --exclude).   If  contradictory
          --include and --exclude options are given,  the  last  matching
          one  wins.   If no --include or --exclude options match, a file
          is included unless the first such option is --include.

관련 정보