Linux grep 명령어

현승빈·2023년 7월 27일

개요

운영체제는 ubuntu 20.04 버전입니다.

Linux 에 grep 명령어를 알아보겠습니다.

Linux의 grep 명령은 파일 또는 입력 스트림 내에서 텍스트 패턴을 검색하는 데 사용되는 강력한 도구입니다. "Global Regular Expression Print"의 약자입니다. grep 명령의 기본 구문은 다음과 같습니다.

grep [OPTIONS] PATTERN [FILE...]

OPTIONS: grep 명령의 동작을 수정하는 데 사용할 수 있는 다양한 옵션입니다.
PATTERN: 검색하려는 정규식 패턴입니다.
FILE: 검색하려는 파일을 나타내는 선택적 인수입니다. 파일이 제공되지 않으면 grep은 표준 입력(예: 파이프로 연결된 텍스트)에서 읽습니다.

다음은 grep과 함께 사용되는 몇 가지 일반적인 옵션입니다.

-i :  대소문자 무시(대소문자 구분 검색).
-v :  일치를 반전합니다. 즉, 패턴과 일치하지 않는 행을 표시합니다.
-r 또는 -R: 디렉토리를 재귀적으로 검색합니다(여러 파일에서 검색하는 데 유용함).
-n : 일치하는 줄과 함께 줄 번호를 표시합니다.
-l : 실제 일치하는 라인이 아닌 패턴을 포함하는 파일의 이름만 인쇄합니다.
-c : 줄 자체가 아니라 일치하는 줄의 수를 인쇄합니다.

사용 예:

"file.txt" 파일에서 "example"이라는 단어를 검색합니다.

grep "example" file.txt

"text.txt" 파일에서 "hello"에 대한 대소문자를 구분하지 않는 검색:

grep -i "hello" text.txt

디렉터리 및 해당 하위 디렉터리 내의 모든 파일에서 "search-term"을 재귀적으로 검색합니다.

grep -r "search-term" /path/to/directory

"data.txt"라는 파일에 "pattern"이 포함된 줄 수를 표시합니다.

grep -c "pattern" data.txt

"log.txt" 파일에서 "error"라는 단어가 포함되지 않은 줄을 검색합니다.

grep -v "error" log.txt

위와 같이 grep 명령어를 사용 할 수 있지만 grep은 다른 명령어와 같이 사용할 수 도 있습니다.

ls를 사용한 grep:
ls로 얻은 디렉토리 목록의 이름을 기반으로 파일을 필터링하기 위해 grep을 사용할 수 있습니다.

예: 이름에 "ec2"라는 단어가 포함된 현재 디렉토리의 모든 파일을 나열합니다.


$ ls | grep "ec2"
ec2.tf
ec2_create.tf
ec2_info.tfplan

cat을 사용한 grep:
cat을 사용하여 여러 파일의 내용을 연결하고 표시한 다음 grep에 연결하여 특정 패턴을 검색할 수 있습니다.

예: cpu_check.sh 라는 셸 스크립트에서 "body"라는 단어가 포함된 모든 줄을 표시합니다.

$ cat cpu_check.sh | grep "body"

# Set the body JSON structure
body='{
  curl -X POST -H 'Content-type: application/json' --data "$body" "$slack_webhook_url"
  curl -X POST -H 'Content-type: application/json' --data "$body" "$teams_webhook_url"

ps를 사용한 grep:
ps를 사용하여 실행 중인 프로세스를 나열한 다음 grep을 사용하여 이름을 기반으로 특정 프로세스를 필터링할 수 있습니다.

예: 이름에 "chrome"이 포함된 실행 중인 모든 프로세스를 나열합니다.

~$ ps aux | grep "chrome"
tmdqls6+    1037  0.0  0.0   8168   716 pts/0    S+   13:41   0:00 grep --color=auto chrome

grep 명령은 정규식을 사용하여 패턴을 정의하므로 필요한 경우 더 복잡한 검색 패턴을 사용할 수 있습니다.
더 많은 패턴 일치가 필요한 경우 man grep 을 통해 알 수 있습니다.

profile
클라우드 엔지니어

0개의 댓글