grep 은 Global regular expression print의 약자로 우리가 잘 아는 윈도우 검색창과 비슷한 역할을 한다고 보면 되는데요.
일반적으로 파일 속 내용을 찾거나 터미널 창 출력물 내용을 찾을 때 2가지 케이스로 사용됩니다.
이 글을 읽기 전 선수 지식 포스팅
파일 속 내용 찾기
cat 을 통해 greptutor.txt 파일을 읽어보겠습니다.
output:
해당 파일은 이름, 전화번호, 주소로 구성되어 있는 파일인데요.
grep "검색하고자 하는 명" 파일명 순으로 작성하면 빨간색으로 검색된 부분이 표시되고 해당 부분이 포함된 행 전체가 출력됩니다.
만약 존재하지 않는 검색어로 검색한다면 아무것도 출력되지 않습니다.
다양한 인자 사용
1) -w (whole words)
grep 은 디폴트로 전체 값이 일치하지 않더라도 일치하는 부분이 있으면 검색되는 구조입니다.
하지만 -w 를 추가하면 반드시 일치해야만 검색이 됩니다.
2) -i (insensitive)
기본적으로 grep 으로 검색할 때 대소문자를 명확하게 따집니다.
예시를 보면 "john" 과 "John"이 전혀 다른 결과를 출력하는 걸 알 수 있는데요.
대소문자 상관없이 검색을 하고자 한다면 -i 를 추가해주면 됩니다.
3) -n
-n 을 추가하면 검색된 문자의 행도 함께 출력이 됩니다.
4) -B (before)
-B 인자를 추가하면 검색된 문자를 기준으로 앞 몇 줄을 추가적으로 보여줄지 설정할 수 있습니다.
우리 예시에서는 -B 3 이니까 앞에 3줄을 보여달라는 뜻입니다.
5) -A (after)
-B 와 반대로 -A 는 뒤에 몇 줄까지 출력해줄지 정하는 인자입니다.
우리 예시에서는 -A 3 이니까 뒤에 3줄을 보여달라는 뜻입니다.
6) -C (center)
-C 는 해당 검색 문자가 있는 행을 기준으로 위아래로 몇 줄을 보여줄지 정하는 명령어입니다.
우리 예시에서는 위아래를 1줄씩 보여주도록 세팅하였습니다.
지금까지는 하나의 파일을 대상으로 검색했다면 여러 개 파일을 대상으로 할 수 있습니다.
위와 같이 ./* 는 현재 경로 하위에 있는 모든 파일을 검색하겠다라는 뜻입니다.
output:
빨간색 사각형 부분은 파일 전체를 기준으로 하다보니 중간에 디렉토리 형태나 Binary file등을 만나면 해당 내용을 읽을 수 없다고 표시해주는 것입니다.
파란색 부분에서는 발견 된 파일명과 행을 표시해줍니다.
빨간색 사각형 부분이 불편하신분은 확장자까지 작성하여 탐색 범위를 좁혀주시면 됩니다.
앞선 예제에서는 디렉토리를 검색하려고하면 "Is a directory"라는 문구가 나오면서 검색을 못한다고 했습니다.
하지만 디렉토리에 들어가서 그 내부 파일들을 찾게하는 방법이 있습니다.
7) -r (recursive)
-r 인자를 추가해주면 되는데요.
디렉토리 내부에 접근하여 파일들을 훑고 그 안에 하위 디렉토리가 있다면 또 접근하여 파일을 탐색하는 recursive 한 동작을 합니다.
다만, 규모가 큰 디렉토리에서 사용할경우 시간이 상당히 많이 걸릴 수 있으니 주의 바랍니다.
8) -l
-l 인자는 매치된 내용물은 보여주지 않고 검색되 내용을 포함하고 있는 파일명만 출력합니다.
9) -c
-l 과 비슷해보이지만 매칭된 갯수까지 추가적으로 출력합니다.
10) 정규표현식( -P )
정규표현식은 문자를 검색할때 더욱 디테일하게 검색할수 있도록 도와주는 표현식입니다.
이번 포스팅에서는 정규표현식에 대한 설명은 생략합니다.
(해당 사이트를 통해 정규표현식을 연습해볼 수 있습니다.)
아래 예시는 전화번호를 찾기 위해 정규식을 통한 규칙 패턴을 작성한것입니다.
output:
위 예제에서는 인자 없이 작성하였지만 명시적으로 -P를 붙혀주고 사용하기도 합니다.
출력 결과에서 찾기
지금까지는 파일 내용을 검색하는 법에 대해 알아봤다면 터미널 출력 결과물에 대해 검색하는 법에 대해 알아보겠습니다.
물론 앞서 배운 내용들도 똑같이 적용이 됩니다.
지금까지 사용한 명령어를 출력해주는 history를 기입합니다.
output:
이 출력물 중 원하는 부분만 추출하고 싶습니다.
| 다음에 grep 을 사용하는 방식으로 사용하면 됩니다.
| 는 중첩해서도 사용가능한데요. 중첩할 수록 범위를 점점 좁혀 나갑니다.
우리 예시에서는 "grep-A" 를 검색하면서 "john" 도 포함하고 있는 행을 찾으라는 명령어입니다.
'리눅스' 카테고리의 다른 글
[docker 기초] 도커 nvidia gpu 초기 세팅 방법 (1) | 2022.12.09 |
---|---|
우분투 1> 2> 꺽쇠 무엇일까? (0) | 2022.12.07 |
우분투 dev/nvme0n1p2 clean 부팅 오류 해결 방법 (0) | 2022.12.05 |
리눅스 cat 명령어 사용법 완벽 정리 (0) | 2022.12.05 |
리눅스에서 vi, vim, nano 없이 파일 쉽게 작성하는법(with cat) (0) | 2022.12.01 |
댓글