[Linux_bash] regex: 정규표현식 그룹(capture group) 이용하기 리눅스_Bash Script


정규표현식을 사용할 수 있는 명령어를 쓸 때
특정 패턴을 그룹 지어놓으면 편리할 때가 많다.

그룹을 짓는 방법: \(패턴\)

예를들어
# 특정 문자 패턴이 반복되는 것을 찾을 때

찾고싶은 것이 태어난 년도의 뒷자리 2개와 날짜가 같은 경우라고 생각하자.
YYYY/MM/DD
-> 이 두개가 같은 경우

grep '..\(..\)/../\1' filename

..: 처음의 점 두개는 YYYY 이다.
\(..\): 뒤의 점 두개 (YYYY)는 그룹으로 묶었다.
점은 임의의 문자 하나를 의미한다.
/../: 월(month)를 의미
\1: 첫번째 그룹을 의미

이렇게 같은 패턴이 나중에 또 나올 때
그룹으로 묶어서 불러오면 편리하다.

불러오는 방법은 \1, \2 .. 와 같이 백슬래쉬 뒤에 숫자를 붙인다.
숫자는 그룹이 지어진 순서대로 (=왼쪽부터) 1,2,3,.. 이다.

# filed 별로 순서를 바꿀 때

AA BB 와 같은 문자열을
BB AA 로 순서를 바꾸는 경우라고 생각하자.
vi에서 치환한다.

vi filename
:%s/\(..\) \(..\)/\2 \1/g

# 패턴 전이나 후에 문자를 추가할 때

AA BB 와 같은 문자열을
BB and AA 로 바꾸는 경우라고 생각하자.
이럴 때도 vi에서 치환한다.

vi filename
:%s/\(..\) \(..\)/\2 and \1/g

바꿀 스트링을 쓰는 곳에
그룹을 불러오면서 원하는 문자를 추가할 수 있다.


덧글

댓글 입력 영역