반달가면 이글루에서 백업 - 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
'bash script' 카테고리의 다른 글
[bash: grep] 탭(tab)이 포함된 문자열 검색 (0) | 2023.07.04 |
---|---|
[bash: grep] 문자열 검색하면서 행번호 같이 표시하기 (0) | 2023.07.03 |
[bash: ${}] 셸 파라메터 확장(shell parameter expansion) (0) | 2023.06.30 |
[bash: expr] 특정 위치에서 특정 길이만큼 문자열 추출 (0) | 2023.06.30 |
[bash: awk] 특정 위치(field)에 대한 문자열 검색 (0) | 2023.06.29 |