나는 단어의 일부를 검색하려고 할 때 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
보고되지 않습니다.