bash script2020. 11. 9. 17:11

 

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

 

grep을 이용한 문자열 검색에서 정규표현(regular expression)은 매우 유용하지만 이걸 비활성화해야 될 경우가 있다. 일단, 찾고자 하는 문자열이 명시적으로 정해져 있다면 문제는 간단하다. 문자열을 작은따옴표로 감싸거나, 정규표현에 사용되는 [, -, ] 등의 기호 앞에 역슬래시(\) 기호를 사용하면 된다. 아래의 예시를 보자.

 

# a부터 z까지, 즉 영소문자를 검색하는 정규표현

cat my_file.txt | grep "[a-z]"

 

# 검색하려는 문자열 자체가 '[a-z]'인 경우

cat my_file.txt | grep '[a-z]'

cat my_file.txt | grep "\[a\-z\]"

 

그러나 만약 변수에 할당된 문자열에 정규표현에 사용되는 기호가 포함되어 있을 경우엔 어떻게 할 것인가? 이 경우엔 정규표현으로 해석이 되지 않도록 -F 옵션을 사용하면 된다.

 

str="[a-z]"

cat my_file.txt | grep -F "$str"

 

이렇게 해도 해결이 안되는 경우가 있는데, 검색하고자 하는 문자열이 하이픈(-)으로 시작되는 경우이다. 이 경우에는 -e 옵션을 같이 사용하자.

 

str="-[a-z]"

cat my_file.txt | grep -Fe "$str"

 

파일에서 문자열을 읽어서 변수에 할당하고 이 변수가 grep 명령어에 사용되는 경우, 문자열에 특수문자들이 포함될 가능성이 있다면 -Fe 옵션을 추가해 주자.

 

 

728x90
Posted by 반달가면