bash script2023. 7. 3. 13:17

 

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

 

grep 명령에서 정규표현식(regular expression)에 사용되는 특수문자(special character)들이 있는데, 간혹 실수하는 경우가 있어서 여기에 모아서 정리해 두기로. 해당 특수문자는 ^, $, [], ., *, \ 등이다. 아래의 예시를 보자.

# ^: 행의 시작
# test.txt 파일에서 abc로 시작되는 행 검색
grep "^abc" test.txt

# $: 행의 끝
# test.txt 파일에서 abc로 끝나는 행 검색
grep "abc$" test.txt

# []: 캐럭터 집합 또는 범위
# test.txt 파일에서 a 또는 b 또는 x가 포함된 행 검색
grep "[abx]" test.txt
# test.txt 파일에서 수자가 포함된 행 검색
grep "[0-9]" test.txt

# .: 임의의 한 바이트 문자
# test.txt 파일에서 a와 b 사이에 임의의 한 바이트가 있는 행 검색
grep "a.b" test.txt

# *: 0개 이상의 선행 문자
# test.txt 파일에서 a 다음에 b가 0개 이상(즉, a 다음에 b가 없는 경우도 유효)인 행 검색
grep "ab*" test.txt

# \: 바로 다음 문자에 대해 특수문자 해석을 비활성화
# test.txt 파일에서 abc$로 끝나는 행 검색
grep "abc\$$" test.txt
# test.txt 파일에서 ^cd.ab 문자열이 포함된 행 검색
grep "\^cd\.ab" test.txt

특수문자가 포함된 문자열을 grep 명령으로 검색할 때, 문자열을 직접 지정해 줄 경우에는 역슬래시(\)를 잘 활용하면 되므로 큰 문제가 없다. 그러나 만약 검색하고자 하는 문자열이 변수에 할당되어 있는데 여기에 특수문자가 포함되어 있다면 grep 명령에 -Fe 옵션을 추가해 주면 된다. (이전 게시물을 참고하자. 여기로)

 

host_name="bahndal.egloos.com"
grep -Fe "$host_name" test.txt

또는 sed 명령을 이용해서 특수문자에 역슬래시를 붙여도 된다. (이전 게시물을 참고하자. 여기로)

 

host_name="bahndal.egloos.com"
grep_str=`echo "$host_name" | sed 's/\./\\\./g'`
grep "$grep_str" test.txt

728x90
Posted by 반달가면