<Linux Shell Script Chapter 4> - 정규 표현식과 검색도구 1

심우열·2023년 2월 13일
0

Linux Shell Script

목록 보기
7/17

1. 정규 표현식(Regular Expression)과 GREP

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)

  1. 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 비교문에 사용, 우측항에 정규표현식 패턴식을 작성
  1. 정규 표현식 패턴 비교
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)

  1. 입력으로 전달된 파일의 내용에서 특정 문자열으 찾고자 할 때 사용하는 명령어
  2. 원하는 내용을 포함하는 항목 검색
grep "George.*Washington" president.txt
president.txt 파일에서 George 로 시직하고 Washington 으로 끝나는 내용을 포함하고 있는 항목 출력
  1. 원하는 내용을 포함하는 항목의 개수 검색
grep -c George president.txt
president.txt 파일에서 George 가 포함된 항목의 개수 출력
  1. 원하는 내용을 포함하는 부분만 검색
grep -o "George.*" president.txt
president.txt 파일에서 George.* 와 패턴 매칭이 일어나는 부분만 출력
  1. egrep
grep 'Donald\|Obama' president.txt
president.txt 파일에서 Donald 또는 Obama 를 포함하는 항목 출력
egrep 'Donald|Obama' president.txt
president.txt 파일에서 Donald 또는 Obama 를 포함하는 항목 출력, 
egrep을 통해 작은 따옴표 안에서 파이프 기호를 백슬래시를 통해 
이스케이프 시키지 않아도 파이프기호 의미 유지
  1. 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
  1. 원하는 내용을 제외한 항목 검색
grep -i 'richard' president.txt | grep -v 'Nixon'
president.txt 에서 richard 또는 Richard를 포함하고 있는 항목 중 Nixon이 포함된 항목 제외하고 출력
  1. 빈 줄 검색
grep -c "^$" president.txt
^는 원하는 내용의 시작, $는 원하는 내용의 끝을 의미하는 정규 표현식
  1. 원하는 내용의 앞줄 뒷줄 함께 검색
grep -A1 -B1 -E '198[[:digit:]]\)$' president.txt
president.txt 파일에서 198?)로 끝나는 항목들을 출력하고
그 앞 항목(A1)과 뒷 항목(B1)을 함께 출력
  1. 정규 표현식이 아닌 일반 검색용 찾기 명령 fgrep, 메타문자를 모두 일반문자로 해석
fgrep '(1974' president.txt
profile
Dev Ops, "Git, Linux, Docker, Kubernetes, ansible, " .

1개의 댓글

comment-user-thumbnail
2024년 3월 17일

우연히 구글링해서 읽어보게 되었는데 우열님이셨군요! 글 정말 깔끔하게 잘 작성하셔서 보기도 좋고 엄청 잘 읽혀요 ㅎㅎ 도움주셔서 감사합니다:)

답글 달기