본문 바로가기
Computer Science/[19-상] Linux Bash Script

[Linux_bash] regex: 정규표현식 그룹(captured group) 이용하기

by gojw 2020. 2. 29.

정규표현식을 사용할 수 있는 명령어를 쓸 때

특정 패턴을 그룹 지어놓으면 편리할 때가 많다.

 

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

 

예를 들어서

1. 특정 문자 패턴이 반복되는 것을 찾을 때

 

찾고싶은 것이 특정 년도의 뒷자리 2개와 날짜가 같은 경우라고 생각하자.

YYYY/MM/DD

-> 이 두개가 같은 경우

 

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

 

..: 처음의 점 두개는 YYYY 이다.

\(..\): 뒤의 점 두개 (YYYY)는 그룹으로 묶었다.

점은 임의의 문자 하나를 의미한다.

/../: 월(month)를 의미

\1: 첫번째 그룹을 의미

 

이렇게 같은 패턴이 나중에 또 나올 때

그룹으로 묶어서 불러오면 편리하다.

 

불러오는 방법은 \1, \2 .. 와 같이 백슬래쉬 뒤에 숫자를 붙인다.

숫자는 그룹이 지어진 순서대로 (=왼쪽부터) 1,2,3,.. 이다.

 

2. filed 별로 순서를 바꿀 때

 

AA BB 와 같은 문자열을

BB AA 로 순서를 바꾸는 경우라고 생각하자.

vi에서 치환한다.

 

vi filename

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

 

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

 

AA BB 와 같은 문자열을

BB and AA 로 바꾸는 경우라고 생각하자.

이럴 때도 vi에서 치환한다.

 

vi filename

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

 

바꿀 스트링을 쓰는 곳에

그룹을 불러오면서 원하는 문자를 추가할 수 있다.

댓글