본문 바로가기

Operating Systems/Linux

[ Linux ] GREP 활용

Ansi Escape Code

# 파일의 특정한 패턴의 문자열 가진 문장을 출력해주는 명령어
# grep [문자열] [파일명] 형태로 사용

# options

# --color 옵션
# 옵션을 지정하지 않을 경우 default 값은 auto
# none, auto, always 를 사용
# none   : grep 문자열에 대한 하이라이팅을 사용하지 않음
# auto   : grep 문자열에 대한 하이라이팅을 사용
# always : grep 에 대한 표준 출력을 파이프로 넘겼을 경우에도 하이라이팅을 유지

# grep 하이라이팅 색깔을 지정
# ANSI ESCAPE CODE 를 따름
export GREP_COLOR=34

# grep 문자 '\-.,' 에 대한 하이라이팅이 표시되지 않음
grep --help | grep -E '\-.,' | head -10

# 파이프로 넘겨도 하이라이팅이 유지됨
grep --help | grep --color=always -E '\-.,' | head -10

# grep 을 always로 설정
alias grep='grep --color=always'

#
grep --help | grep -E '\-.,' | head -10

# -E 옵션
# grep 대상 문자열이 정규표현식을 사용할 수 있도록 함
# 정규식
# ^       : 행의 시작 지시자 => '^test' : test로 시작하는 모든 행과 대응함.

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "^user1"

# $       : 행의 끝 지시자 => 'test$' : test로 끝나는 모든 행과 대응함. 

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "user1$"

# .       : 하나의 문자와 대응 => 't.s.' : 총 4개의 문자로 이루어진 문자열을 검색하는 데, 첫 번째는 't' 세 번째는 's'인 문자열을 모두 대응.

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "u.er"

# *       : 선행 문자와 같은 문자 0개 또는 임의 개수와 대응 => 'test*' :'test'를 기본으로 뒤에 아무 문자나 포함하여도 모두 대응.

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "u.*"

# []      : [] 사이의 문자 집합 중, 하나와 대응 => '[Tt]est' : 'test' 나 'Test'를 대응함.

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "[12]"

# [^ ]    : 문자집합에 속하지 않는 한 문자와 대응 => '[^A-T]est' : A와 T 사이 범위에 포함되지 않는 한 문자와 est가 붙은 문자열만 검색한다. 

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "user[^13]"

# \<      : 단어의 시작 지시자 => \<test : test로 시작하는 단어를 포함하는 행과 대응 

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "\<user1"

# \>      : 단어의 끝 지시자 => 'test\>' : test로 끝나는 단어를 포함하는 행과 대응 

echo -e "id\tage\treferee\nuser1\t17\nuser2\t21\tuser1" | grep -E "user1\>"

# x{m}  : 문자 x를 m번 반복한다. => 't\{5\}' : 문자 t가 5회 연속으로 나오는 모든 행을 대응함. 

echo -e "id\tage\treferee\nuser1\t17\taaaa\nuser2\t21\tuser1" | grep -E "a{2}"

# x{m,} : 적어도 m번 반복한다. => 't\{5,\}' : 문자 t가 최소한 5회 반복되는 모든 행과 대응함. 
echo -e "id\tage\treferee\nuser1\t17\taaaa\nuser2\t21\tuser1" | grep -E "a{3,}"

 x\{m,n\} : m회 이상 n회 이하 반복한다. => t\{5,10\}' : 문자 t가 5회에서 10회 사이의 횟수로 연속으로 나오는 문자열과 대응함.
 echo -e "id\tage\treferee\nuser1\t17\taaaa\nuser2\t21\tuser1" | grep -E "a{2,3}"

# -i 옵션 : (Ignore) 대소문자를 구분하지 않는다. (대소문자 같은 취급) 

echo -e "abc\naBc\nABC" | grep -i abc

# -I 옵션 : 대소문자를 구분한다.

echo -e "abc\naBc\nABC" | grep -I abc

# -n 옵션 : (line Number) 파일 내에서 행 번호를 함께 출력한다. 

echo -e "abc\naBc\nABC" | grep -n ABC

# -c 옵션 : (Count) 검색 결과를 출력하는 대신에 찾아낸 행의 총 개수를 출력한다.

echo -e "abc\naBc\nABC" | grep -i -c abc

# -v 옵션 : (inVerse) 검색 결과를 제외한 행을 출력한다.

echo -e "abc\naBc\nABC" | grep -v abc