파일내 문자열 찾기 : grep

예전에 이를 위해 find 를 사용한 적이 있는데.. 좀 더 세밀한 검색이 필요할 땐 find 가 유용하지만, 평소엔 grep 면 충분하다.
자꾸 잊기 때문에 정리해본다. (문제는.. 예전에도 정리한 적이 있는 듯 하다는 건데?)


형식은 다음과 같다.

grep -Rnw -P '문자열' <경로>

여기에, i 와 l 등이 필요할 때가 있다.

  • -R : Recursive. 링크 파일도 검색. -r 은 링크는 무시한다.
  • -n : 문자열이 파일에서 몇번째 행에 나왔는지 표시한다.
  • -w : word-regexp 라고 하는데.. 잘 이해가 안된다. (Whole Word?)
  • -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 에서 도움을 얻었다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.