무효 클릭 IP 추적 중...
리눅스

리눅스 grep 사용법 (문자열 찾기)

꼬예 2022. 12. 6.

 grep 은 Global regular expression print의 약자로 우리가 잘 아는 윈도우 검색창과 비슷한 역할을 한다고 보면 되는데요.

 

탐색기창 비유

 

일반적으로 파일 속 내용을 찾거나 터미널 창 출력물 내용을 찾을 때 2가지 케이스로 사용됩니다. 

 

 

이 글을 읽기 전 선수 지식 포스팅

 

파일 속 내용 찾기

 cat 을 통해  greptutor.txt 파일을 읽어보겠습니다.

 

cat으로 파일 읽기

output:

파일내용

 

해당 파일은 이름, 전화번호, 주소로 구성되어 있는 파일인데요.

 

 grep  "검색하고자 하는 명"  파일명  순으로 작성하면 빨간색으로 검색된 부분이 표시되고 해당 부분이 포함된 행 전체가 출력됩니다. 

 

검색어를 기준으로 필터

 

만약 존재하지 않는 검색어로 검색한다면 아무것도 출력되지 않습니다.

 

존재하지 않는 검색어로 검색

 

다양한 인자 사용

 

1) -w (whole words)

 grep 은 디폴트로 전체 값이 일치하지 않더라도 일치하는 부분이 있으면 검색되는 구조입니다.

 

-w 없이 디폴트 상태

 

하지만  -w 를 추가하면 반드시 일치해야만 검색이 됩니다.

 

-w하니 검색안됨
완벽히 일치해야 검색됨

 

2) -i (insensitive)

기본적으로  grep 으로 검색할 때 대소문자를 명확하게 따집니다.

예시를 보면 "john" 과 "John"이 전혀 다른 결과를 출력하는 걸 알 수 있는데요.

 

대소문자 구분

 

대소문자 상관없이 검색을 하고자 한다면  -i 를 추가해주면 됩니다.

 

3) -n

 -n 을 추가하면 검색된 문자의 행도 함께 출력이 됩니다.

 

-n 추가

 

4) -B (before)

 -B 인자를 추가하면 검색된 문자를 기준으로 앞 몇 줄을 추가적으로 보여줄지 설정할 수 있습니다.

우리 예시에서는  -B 3 이니까 앞에 3줄을 보여달라는 뜻입니다.

 

-B 사용

 

5) -A (after)

 -B 와 반대로  -A 는 뒤에 몇 줄까지 출력해줄지 정하는 인자입니다.

우리 예시에서는 -A 3 이니까 뒤에 3줄을 보여달라는 뜻입니다.

 

-A 인자 추가

 

6) -C (center)

 -C 는 해당 검색 문자가 있는 행을 기준으로 위아래로 몇 줄을 보여줄지 정하는 명령어입니다.

우리 예시에서는 위아래를 1줄씩 보여주도록 세팅하였습니다.

 

-C 인자 적용

 

지금까지는 하나의 파일을 대상으로 검색했다면 여러 개 파일을 대상으로 할 수 있습니다.

 

경로 전체파일 검색

 

위와 같이  ./* 는 현재 경로 하위에 있는 모든 파일을 검색하겠다라는 뜻입니다.

 

output:

./* output

 

빨간색 사각형 부분은 파일 전체를 기준으로 하다보니 중간에 디렉토리 형태나 Binary file등을 만나면 해당 내용을 읽을 수 없다고 표시해주는 것입니다.

 

파란색 부분에서는 발견 된 파일명과 행을 표시해줍니다.

 

빨간색 사각형 부분이 불편하신분은 확장자까지 작성하여 탐색 범위를 좁혀주시면 됩니다.

 

확장자 명시

 

앞선 예제에서는 디렉토리를 검색하려고하면 "Is a directory"라는 문구가 나오면서 검색을 못한다고 했습니다.

 

 

하지만 디렉토리에 들어가서 그 내부 파일들을 찾게하는 방법이 있습니다. 

 

7) -r (recursive)

 -r  인자를 추가해주면 되는데요.

디렉토리 내부에 접근하여 파일들을 훑고 그 안에 하위 디렉토리가 있다면 또 접근하여 파일을 탐색하는 recursive 한 동작을 합니다. 

 

recursive 인자 추가

 

다만, 규모가 큰 디렉토리에서 사용할경우 시간이 상당히 많이 걸릴 수 있으니 주의 바랍니다.

 

8) -l

 -l 인자는 매치된 내용물은 보여주지 않고 검색되 내용을 포함하고 있는 파일명만 출력합니다.

 

-l인자 추가 > 파일명 출력

 

9) -c

 -l 과 비슷해보이지만 매칭된 갯수까지 추가적으로 출력합니다.

 

-c 추가

 

10) 정규표현식( -P )

정규표현식은 문자를 검색할때 더욱 디테일하게 검색할수 있도록 도와주는 표현식입니다.

이번 포스팅에서는 정규표현식에 대한 설명은 생략합니다.

(해당 사이트를 통해 정규표현식을 연습해볼 수 있습니다.)

 

아래 예시는 전화번호를 찾기 위해 정규식을 통한 규칙 패턴을 작성한것입니다.

 

정규표현식 사용

output:

 

위 예제에서는 인자 없이 작성하였지만 명시적으로 -P를 붙혀주고 사용하기도 합니다.

 

 

출력 결과에서 찾기

지금까지는 파일 내용을 검색하는 법에 대해 알아봤다면 터미널 출력 결과물에 대해 검색하는 법에 대해 알아보겠습니다.

물론 앞서 배운 내용들도 똑같이 적용이 됩니다. 

 

지금까지 사용한 명령어를 출력해주는 history를 기입합니다.

 

history 기입

 

output:

history output

 

이 출력물 중 원하는 부분만 추출하고 싶습니다.

 

history grep 사용

 |  다음에  grep 을 사용하는 방식으로 사용하면 됩니다.

 

 | 는 중첩해서도 사용가능한데요. 중첩할 수록 범위를 점점 좁혀 나갑니다. 

우리 예시에서는  "grep-A" 를 검색하면서  "john" 도 포함하고 있는 행을 찾으라는 명령어입니다.

 

| 중첩사용

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글