grep 명령에 대한 설명은 인터넷에 많이 있는데, 기본적으로 man 명령을 대략적으로 번역한 것입니다. 읽고 나면 잊어버릴 것 같아요! 개인적으로 명령을 익히는 가장 좋은 방법은 실제 환경을 시뮬레이션하고, 사용할 수 있는 몇 가지 명령 조합을 적어본 다음, 천천히 소화하는 것이라고 생각합니다. 처음에는 기본적으로 암기했지만 시간이 지날수록 점점 시야가 넓어졌습니다. 이제 본론으로 가서 멋진 grep 명령에 대해 이야기해 보겠습니다.
grep은 General Regular Expression Parser의 약자로 리눅스 시스템에서는 간단히 검색 명령어로 이해하면 됩니다. 다음으로 바로 예시로 들어가겠습니다:
1. /etc/passwd 파일에서 지정된 문자열
을 검색합니다. guolei:
grep 'guolei' /etc/passwd
guolei의 따옴표는 생략 가능하지만, 검색 문자열에 공백이 있거나 정규식을 사용하는 경우에는 따옴표를 추가해야 합니다.
2. 여러 파일에서 지정된 문자열 검색
현재 디렉터리에서 guolei 문자열이 포함된 파일 검색:
grep -r guolei *
참고: -r은 recursive의 약자로 재귀 검색을 의미합니다.
현재 디렉터리의 .java 파일에서 guolei 문자열이 포함된 파일을 검색합니다.
grep -r guolei *.java
때때로 검색 결과가 더 많을 수 있으므로 less 명령을 사용하여 표시할 수 있습니다. 결과는
grep -r guolei *.java | less
이거나 파일 이름만 나열하면 됩니다.
grep -rl guolei *.java
우리가 흔히 원하는 또 다른 요구 사항이 있습니다. 문자열의 파일을 지정하는 디렉토리를 찾으십시오. 위 명령은 재귀적으로 검색할 수 없습니다. 예를 들어, 현재 디렉터리에서 guolei 문자열이 포함된 모든 .java 파일을 재귀적으로 검색하려고 합니다.
find . -type f -name *.java -exec grep -il guolei {} \;
3. 검색 시
대소문자를 무시합니다. guolei를 검색할 때 대소문자 무시:
grep -ri guolei *
참고: -i는 대소문자 무시를 의미하는 Ignore Case의 약어입니다.
4. 검색 결과에 줄 번호 나열
검색 결과에 문자열이 나타나는 줄 번호 나열:
grep -rn guolei *.java
참고로 -n은 number의 약자로 줄 번호를 의미합니다.
5. 역검색
실제 개발에서는 더 흔한 상황이 또 있습니다. 특정 문자열의 파일을 포함하지 않음:
grep -riv guolei * | less
참고: -v는 reverse의 약자로 reverse를 의미합니다. 위의 예에서는 현재 디렉터리에서 guolei가 포함되지 않은 파일을 검색합니다.
6. 파이프라인에서 grep 사용
우리는 파이프라인 명령에서 grep을 자주 사용하는데, 이것이 가장 일반적입니다. 예를 들어, 현재 시스템에서 mysql 프로세스를 검색하고 싶습니다:
ps -ef | grep mysql
또는 현재 디렉토리에서 html로 끝나는 파일 목록:
ls | grep 'html$'