grep이 검색할 때 일부 단어를 찾을 수 없는 이유는 무엇입니까?

grep이 검색할 때 일부 단어를 찾을 수 없는 이유는 무엇입니까?

나는 단어의 일부를 검색하려고 할 때 grep이 해당 일치 항목을 찾을 수 없는 상황에 여러 번 있었습니다. 완전한 단어를 검색할 때 작동합니다.

예를 들어, "mysql_"이라는 단어가 포함된 모든 파일을 찾아야 합니다. 데이터베이스를 처리하기 위해 "mysqli" 대신 "mysql"을 사용하는 레거시 코드를 작업 중이고, "mysql"을 사용하는 코드가 얼마나 되는지 확인하고 싶었기 때문입니다.

이제 내 명령은

grep -rnw './' -e "mysql_"

또는

grep -P -rnw '\bmysql_' .

여전히 작동하지 않습니다.

하지만 다음을 입력하면:

grep -rnw './' -e "mysql_query"

물론 grep은 모든 일치 항목을 찾습니다.

내가 뭘 잘못했나요?

답변1

'-w' 매개변수를 사용하고 있기 때문에 이는 검색 패턴이 완전한 단어(즉, 분리된 "단어가 아닌" 문자)로 표시되어야 함을 의미합니다.

  -w, --word-regexp
          Select only those lines containing matches that form  whole  words.   The
          test  is  that  the matching substring must either be at the beginning of
          the line, or preceded by a non-word constituent character.  Similarly, it
          must  be  either  at  the  end  of  the  line  or  followed by a non-word
          constituent character.  Word-constituent characters are letters,  digits,
          and the underscore.

정규식에서 밑줄은 "단어" 문자입니다.

mysql_이는 단어(예 mysql_query: ) 의 일부로만 발생 하므로 grep -w보고되지 않습니다.

관련 정보