grep은 --include를 무시하는 것 같습니다.

grep은 --include를 무시하는 것 같습니다.

man grep설명하다

grep [OPTIONS] PATTERN [FILE...]

. . .

   --include=GLOB
          Search  only  files whose base name matches GLOB (using wildcard
          matching as described under --exclude).

그래서 나는 들어갔다.

grep --include="*.html" 'li' *

li현재 디렉토리에서 HTML 파일의 인스턴스를 검색합니다. 대신 liHTML이 아닌 파일에서도 디렉토리의 모든 사용 목록을 얻습니다 . 내가 뭘 잘못했나요? 나는 다음과 같은 다양한 변형을 시도했습니다.

grep --include=\*.html 'li' *

하지만 행운은 없습니다.

답변1

--include=PATTERN추가하는 경우에만 작동합니다.-r

$ grep -r --include='*.html' 'li' .

-R, -r, --recursive   Read all files under each directory, recursively; this is equivalent to the -d recurse option.
--include=PATTERN     Recurse in directories only searching file matching PATTERN.
--exclude=PATTERN     Recurse in directories skip file matching PATTERN.

답변2

사용하는 셸(bash, tsh, zsh 등)에 따라 명령줄 와일드카드가 유효한지 여부가 결정됩니다. 대부분의 사람들은 bash가 많은 배포판에 기본적으로 설치되어 있기 때문에 이를 사용합니다. 저는 bash를 사용합니다.

다음 구문은 항상 저에게 효과적이었습니다.

    grep -r --include=*.html li *
  1. 위에서 언급한 것처럼 -r 스위치를 사용하면 grep이 그렇지 않은 경우 검색할 수 없는 하위 디렉터리를 검색할 수 있으므로 grep이 실패한 것처럼 보입니다.
  2. 단순 파일 형식 포함(확장자 1개)에는 조정이 필요하지 않습니다.
  3. 포함된 내용을 인용(작은따옴표 또는 큰따옴표)하지 마십시오. 파서는 이를 좋아하지 않습니다.

여러 확장을 포함하기 위해 bash 중괄호 확장을 사용합니다.

    grep -r --include=*.{html,htm,js} li *

여전히 문제가 발생하는 경우 시도해 볼 수 있는 다른 방법이 있습니다.

  1. 쉘이 이를 구문 분석할 때 *를 탈출하여 보호하십시오.

    grep -r --include=\*.html li *
    
  2. 검색 경로를 더 명확하게 만들기

    grep -r --include=\*.html li ./*
    

답변3

find $directoryname -maxdepth 1 -name '*.html' | xargs grep 'li' 여기서는 -maxdepth 1하위 디렉터리가 아닌 디렉터리만 검색됩니다. 하위 디렉터리에서 검색하려면 -maxdepth 1명령에서 해당 디렉터리를 제거하세요.

답변4

grep -version작동하지 않지만 grep --version제공

grep (GNU grep) 2.9

그리고 저작권 고지.


grep 'li' *.html

쉘이 와일드카드를 수행하도록 하십시오. 이는 재귀를 원하기 때문에 나에게는 작동하지 않습니다.


-R처음에는 (또는) 명령을 사용해 보았지만 -r그 역시 작동하지 않았습니다. 이 명령은 재귀적이지만 html이름(또는 경로의 어느 곳에서도)에 해당 명령이 없는 파일을 표시합니다 . 그래서 그것은 사실이 아닙니다.


댓글로 게시하거나 원본 콘텐츠로 편집했을 텐데, 어떤 이유로 StackExchange가 내 계정을 올바르게 연결하지 못했습니다. (Mods: 이에 대해 의견을 보내주세요!)

관련 정보