grep 명령어
grep은 'Global Regular Expression Print'의 약자로, 표준 입력이나 텍스트 파일에서 특정 패턴이나 문자열을 검색하는 강력한 커맨드라인 툴이다. grep은 텍스트 처리와 데이터 분석에서 중요한 역할을 한다. 정규 표현식(Regular Expression)을 사용해 복잡한 검색 패턴을 생성할 수 있다. 또한, 파일 내부의 특정 문자열을 찾거나 다른 명령어의 출력에서 특정 줄을 필터링하는 데 사용할 수 있다.
grep은 다음과 같이 사용한다.
grep [option] pattern [file]
파일 부분을 입력하지 않으면 표준 입력으로 받은 데이터를 검색한다. 그래서 파이프라인과 결합해 자주 사용한다. 다음은 cat 명령어의 출력결과를 grep으로 검색하는 형식이다.
cat file | grep [option] pattern
grep 명령어의 주요 옵션
- -r : 하위 디렉터리를 포함해 재귀적으로 검색
- -i : 대소문자를 구분하지 않고 검색
- -v : 지정한 패턴을 포함하지 않는 줄을 출력
- -n : 지정한 패턴과 일치하는 줄과 줄 번호를 함께 출력
- -c : 지정한 패턴과 일치하는 줄의 수를 출력
- -l : 지정한 패턴을 포함하는 파일의 이름만 출력
- -L : 지정한 패턴을 포함하지 않는 파일의 이름만 출력
- -E : 확장된 정규 표현식을 사용
- -o : 지정한 패턴과 일치하는 문자열만 각 줄에 출력
- -A [number] : 지정한 패턴과 일치하는 줄부터 수 부분에 지정한 줄 수만큼 더 출력
실습 예제
grep을 실행할 때 파일명을 직접 입력하는 방법과 파이프라인 표준 출력으로 내용을 입력받는 방법이 있다. 첫 번째 방법이 프로세스 하나만 생성되므로 여기서는 이 방법을 사용한다.
grep "star" lyrics // 파일명 직접 입력
cat lyrics | grep "star" // 파이프라인 사용
grep을 실행할 때 별도 옵션을 추가하지 않으면 대소문자를 구분해 검색한다. -i 옵션을 추가하면 대소문자 구분 없이 검색한 결과를 보여준다.
cat lyrics | grep "Star"
cat lyrics | grep -i "Star"
-n 옵션을 추가하면 검색된 결과의 줄 번호를 표시한다.
cat lyrics | grep -n "star"
공백이 포함된 문자열을 검색할 때는 반드시 쿼팅해야한다.
cat lyrics | grep "No one can rewrite"
검색 패턴 부분에 정규 표현식을 사용할 수 있다. 다음 예에서 사용한 ^No.*stars 패턴은 No로 시작해서 stars로 끝나면서 그 사이에는 아무 글자나 와도 된다는 의미이다.
cat lyrics | grep "^No.*stars"
-r 옵션을 사용하면 지정된 디렉터리 하위의 모든 디렉터리와 파일을 대상으로 검색한다. /etc 디렉터리 하위의 파일 중에 현재 로그인된 사용자를 검색해 보자. /etc 하위에는 관리자 권한이 있어야 읽을 수 있는 파일이 많다. 그래서 sudo를 사용해 관리자 권한으로 명령을 실행해야 한다.
sudo grep -r user /etc
검색된 파일의 이름만 출력하려면 -l 옵션을 추가한다. 반대로, 검색되지 않은 이름만 출력하고 싶다면 -L을 추가한다.
sudo grep -rl user /etc
sudo grep -rL user /etc
'프로그래밍 > 리눅스' 카테고리의 다른 글
리눅스 필수 커맨드라인 툴 find (0) | 2025.02.11 |
---|---|
리눅스(Linux) &>와 2>&1 차이점에 대해서 (0) | 2025.02.10 |
|이 대체 뭐야? 리눅스(Linux) 파이프라인(Pipeline)을 알아보자 (0) | 2025.02.09 |
리눅스(Linux) 리디렉션(Redirection)을 알아보자 (0) | 2025.02.09 |
리눅스(Linux) IPC의 종류에 대해서 알아보자 (0) | 2025.02.04 |
댓글