[Linux] grep 명령어에서 AND, OR, NOT 조건 사용하기

grep 명령어에서 AND, OR 그리고 NOT(특정 패턴 제외) 조건들을 사용할 수 있는 방법을 알아보자


환경

  • Linux 기반 시스템
  • Bash shell(/bin/bash)


grep이란?

grep

  • grep: 들어오는 입력에 대해서 주어진 패턴을 포함하는 줄들을 출력해주는 명령어입니다.
# Basic Usage
$ grep [OPTIONS] PATTERN [FILE...]
$ grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
  • 파일 이름과 패턴 사용법
# Example 1
$ grep pattern filename
  • 파이프와 패턴 사용법
# Example 2
$ cat << EOF | grep example
> test
> example
> example1
> example+test
> this
> is
> EOF
example
example1
example+test


AND 조건 사용법

용도

  • 패턴들이 모두 포함된 줄들을 출력합니다.


(방법1) grep을 여러번 이용

  • Pipe를 이용해 여러번 사용합니다.
$ cat test.txt | grep pattern1 | grep pattern2


(방법2) -E 옵션을 이용

  • -E 옵션을 사용합니다.
  • Regular Expression을 이용해 grep 명령어를 사용할 수 있으며 아래와 같은 경우에 pattern1과 pattern2가 동시에 나오는 줄들을 출력하지만 순서도 pattern1 다음에 pattern2가 있는 줄들을 출력하게 됩니다.
$ grep -E grep "pattern1.*pattern2"
  • 다음 아래처럼 사용하면 순서에 상관 없이 두 패턴이 동시에 포함된 줄들을 출력합니다.
$ grep -E grep "pattern1.*pattern2|pattern2.*pattern1"


OR 조건 사용법

용도

  • 패턴들 중 하나라도 포함하고 있는 줄들을 출력합니다.


(방법1) -e 옵션을 이용

$ cat test.txt | grep -e pattern1 -e pattern2


(방법2) -E 옵션을 이용

$ cat test.txt | grep -E "pattern1|pattern2"


NOT 조건 사용법

용도

  • 특정 패턴이 포함되지 않은 줄들을 출력합니다.


(방법) -v 옵션을 이용

# Example 1
$ cat test.txt | grep -v pattern

# Example 2
$ cat test.txt | grep -v pattern1 | grep -v pattern2


참고자료