예전에 이를 위해 find 를 사용한 적이 있는데.. 좀 더 세밀한 검색이 필요할 땐 find 가 유용하지만, 평소엔 grep 면 충분하다.
자꾸 잊기 때문에 정리해본다. (문제는.. 예전에도 정리한 적이 있는 듯 하다는 건데?)
형식은 다음과 같다.
grep -RnwI -P '문자열' <경로>
여기에, i 와 l 등이 필요할 때가 있다.
- -R : Recursive. 링크 파일도 검색. -r 은 링크는 무시한다.
- -n : 문자열이 파일에서 몇번째 행에 나왔는지 표시한다.
- -w : word-regexp 라고 하는데.. 잘 이해가 안된다. (Whole Word?)
- -I : 대문자 I 이고, 바이너리파일은 제외시킨다.
- -i : 소문자 i 이고, 대소문자 무시
- -l : 결과가 있을 경우, 그 파일명만 표시.
결과를 보자면,
$ grep -Rwl -P "apc.enable_cli=1" /etc/php /etc/php/7.4/mods-available/apcu.ini /etc/php/7.4/cli/conf.d/20-apcu.ini /etc/php/7.4/apache2/conf.d/20-apcu.ini $ grep -rwl -P "apc.enable_cli=1" /etc/php /etc/php/7.4/mods-available/apcu.ini
-R 과 -r 은 위 결과처럼 차이가 난다. /etc/php/7.4/cli/conf.d/20-apcu.ini
와 /etc/php/7.4/apache2/conf.d/20-apcu.ini
는 심볼릭 링크이기 때문에 -r 로는 검색되지 않는다. (다시 말하면, 저 세 개는 모두 같은 파일이다.)
헌데.. -w 는 뭔지 잘 모르겠다. 내 경우엔 빼고 넣어도 결과는 같았다.
man page 를 보면, 아마도 \n 등으로 라인이 구분됐을 때를 매칭할지 여부를 정해주는 듯 한데, 정확한 건 모르겠다.
어쨌든 넣는게 좀 더 정확한 결과를 얻을 수 있을 듯.
StackOverflow 에서 도움을 얻었다.