리눅스 grep 여러개 - linugseu grep yeoleogae

리눅스 grep 여러개 - linugseu grep yeoleogae

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

리눅스 grep 여러개 - linugseu grep yeoleogae
달새2020. 12. 31. 6:00

본 포스팅에서는 간단히 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

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

(방법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"

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

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

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

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

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

(방법) -v 옵션을 이용

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

제가 자주쓰는 grep 명령어에 대해 정리해보려해요!

(잊어버리고 다시 찾아보곤 해서,,,)

일단, grep을 어떨때 사용하는 것인지 모르시는 분들이 있을수있기에 간단히 설명해드릴께요 😊

예를들어 엄청 많은 정보가 들어있는 로그파일을 서버에서 읽을때 저는 주로 사용하는데요

저는 그 로그파일에서 특정한 부분만 보고싶은데 불필요한 로그까지 봐야할때! grep을 사용해서 찾고자하는 문장에 들어가있는 키워드만 적어주면 해당 키워드가 들어간 로그만 보여주기 때문에 쉽게 찾을 수 있는 명령어예요!

그럼 이제 grep의 사용방법을 알아볼께요!

grep으로 특정한 키워드(단어)가 들어간 문장 찾기

해당 keyword가 들어가있는 문장 모두 출력

cat logger.txt | grep 'keyword'

grep으로 찾고싶은 단어가 복수개인데 or 조건일때

해당 keyword1 or keyword2 중에서 하나라도 문장에 포함되어 있다면 출력

[방법1] cat logger.txt | grep -E 'keyword1|keyword2'
or
[방법2] cat logger.txt | egrep 'keyword1|keyword2'
or
[방법3] cat logger.txt | grep -e 'keyword1' -e 'keyword2'

grep으로 찾고싶은 단어가 복수개인데 AND 조건일때

해당 keyword1, keyword2가 순서상관 없이 모두 포함되어 있는 문장 출력

[방법1] cat logger.txt | grep 'keyword1' | grep 'keyword2'
or
[방법2] cat logger.txt | grep -E 'keyword1.*keyword2|keyword2.*keyword1'
or
[방법3] cat logger.txt | egrep 'keyword1.*keyword2|keyword2.*keyword1'

해당 keyword1, keyword2가 순서대로 포함되어있는 문장 출력

(아래 예시의 경우 keyword1 다음에 keyword2가 나온문장 출력)

[방법1]  cat logger.txt | grep -E 'keyword1.*keyword2'
or
[방법2] cat logger.txt | egrep 'keyword1.*keyword2'

grep으로 해당단어가 포함되지 않은 문장 찾기

[방법1] cat logger.txt | grep -v 'keyword'
or
[방법2] cat logger.txt | egrep -v 'keyword' 

반달가면 이글루에서 백업 - bahndal.egloos.com/418681

텍스트 파일에서 2개 이상의 문자열을 검색하는 방법이다.

(A and B) 일단 A라는 문자열과 B라는 문자열이 모두 포함된 행을 찾는 것은 간단하다. 파이프(|)를 이용해서, A가 포함된 뿐을 골라낸 후에 거기서 B를 골라내면 된다.

cat file.txt | grep A | grep B

(A or B) A 또는 B가 포함된 행을 찾으려면 A와 B를 파이프(|) 기호로 연결하면 된다. 연산자로 인식하도록 역슬래시(\)를 붙여준다.

cat file.txt | grep "A\|B"

또는 egrep 명령을 활용해도 된다. 작은따옴표(')와 괄호를 이용한다.

cat file.txt | egrep '(A|B)'

만약 shell script에서 변수에 할당된 문자열을 사용하려고 한다면 egrep으로는 어렵고 앞에 언급한 파이프 기호를 이용해야 한다.

str_a="1st string"

str_b="2nd string"

cat file.txt | grep "$str_a\|$str_b"