1. 정규표현식이란?
1. 정규 표현식은 다른 문자열을 검색하거나 치환할 목적으로 고안된 특수한 문자열 2. grep,sed,awk 등 가장 강력한 유닉스 명령행 도구 중 일부는 정규 표현식을 사용
2. 정규표현식의 예시
1. golf 기본검색 2. [Gg]olf 대괄호를 사용하여 Golf, golf 둘다 검색
3. regexr.com 에서 정규 표현식 써보기
https://www.inflearn.com/course/리눅스-쉘-스크립트/unit/54330?tab=community
4. 정규 표현식 비교(if..fi)
- read 명령어를 통한 정규 표현식 비교
read -p "Are you ready ?, press any key (Y/n)" -n 1; if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1; fi
1. $REPLY 는 READ 명령어에서 사용하는 디폴트 변수명 2. =~ 는 REGEX 비교문에 사용, 우측항에 정규표현식 패턴식을 작성
- 정규 표현식 패턴 비교
locale='(..)_(..)'; if [[ $LANG =~ $locale ]]; then echo "Your country code is ${BASH_REMATCH[2]}."; echo "Your language code is ${BASH_REMATCH[1]}."; fi
1. $LANG 은 locale 정보를 담고 있다, locale은 지역과 언어정보 2. 변수 locale의 패턴과 $LANG 의 패턴이 매치되기 때문에, 아래와 같이 BASH-REMATCH[1]과 BASH_REMATCH[2]에 매칭되어 결과 출력 3. 정규표현식 비교문을 작성할 때 인용부호는 사용하지 않아야 함
3. 사용자 입력이 숫자인지를 확인하는 스크립트read -p "Press any number: " -n 1; if [[ ! $REPLY =~ ^[0-9]$ ]]; then echo "This is not a number"; fi
5. 명령어(grep)
- 입력으로 전달된 파일의 내용에서 특정 문자열으 찾고자 할 때 사용하는 명령어
- 원하는 내용을 포함하는 항목 검색
grep "George.*Washington" president.txt
president.txt 파일에서 George 로 시직하고 Washington 으로 끝나는 내용을 포함하고 있는 항목 출력
- 원하는 내용을 포함하는 항목의 개수 검색
grep -c George president.txt
president.txt 파일에서 George 가 포함된 항목의 개수 출력
- 원하는 내용을 포함하는 부분만 검색
grep -o "George.*" president.txt
president.txt 파일에서 George.* 와 패턴 매칭이 일어나는 부분만 출력
- egrep
grep 'Donald\|Obama' president.txt
president.txt 파일에서 Donald 또는 Obama 를 포함하는 항목 출력
egrep 'Donald|Obama' president.txt
president.txt 파일에서 Donald 또는 Obama 를 포함하는 항목 출력, egrep을 통해 작은 따옴표 안에서 파이프 기호를 백슬래시를 통해 이스케이프 시키지 않아도 파이프기호 의미 유지
- POSIX 표현식의 문자클래스
grep -E '^\d{1,2}\. George' president.txt
president.txt 파일에서 한개 또는 두개의 숫자와 . George를 포함하는 모든 항목을 출력, 하지만 정상적으로 작동하지 않음. 아래와 같은 POSIX 표현식의 문자클래스로 작성하면 작동함.
grep -E '^[[:digit:]]{1,2}\. George' president.txt
7. 대소문자 구분 없이 검색grep -i 'richard' president.txt
- 원하는 내용을 제외한 항목 검색
grep -i 'richard' president.txt | grep -v 'Nixon'
president.txt 에서 richard 또는 Richard를 포함하고 있는 항목 중 Nixon이 포함된 항목 제외하고 출력
- 빈 줄 검색
grep -c "^$" president.txt
^는 원하는 내용의 시작, $는 원하는 내용의 끝을 의미하는 정규 표현식
- 원하는 내용의 앞줄 뒷줄 함께 검색
grep -A1 -B1 -E '198[[:digit:]]\)$' president.txt
president.txt 파일에서 198?)로 끝나는 항목들을 출력하고 그 앞 항목(A1)과 뒷 항목(B1)을 함께 출력
- 정규 표현식이 아닌 일반 검색용 찾기 명령 fgrep, 메타문자를 모두 일반문자로 해석
fgrep '(1974' president.txt
우연히 구글링해서 읽어보게 되었는데 우열님이셨군요! 글 정말 깔끔하게 잘 작성하셔서 보기도 좋고 엄청 잘 읽혀요 ㅎㅎ 도움주셔서 감사합니다:)