Written by
Tanji
on
on
정규식 (Regular Expression) 정복하기 첫단계
shell script에서 정규식을 활용하는 것은 코드를 단순화 시켜줄 수 있을 뿐 아니라, 활용성이 무궁무진하게 늘어나게 됩니다.
오늘은 원자의 Cartesian 좌표(x y z)중 소수점 앞자리가 일치하는 경우를 grep 해보려고 합니다.
예를 들어 원자들의 좌표가 아래와 같은 형식으로 되어 있는 Filename이 있다고 가정해 보죠.
7.8792177218 3.9913487495 3.323236208
6.3932716748 6.313747307 12.127696 <<--
3.6535306696 8.176414932 9.480269464
이 때 소수점 앞 부분의 6, 6, 12가 일치하는 두번 째 라인을 grep 하려고 합니다.
그럼 정규식은 6\.[0-9]* 6\.[0-9]* 12\.[0-9]
와 같이 표현해 주면 됩니다.
- 첫번째 일치하기 원하는 숫자
- 소수점은
\.
와 같이 역슬레쉬(\)를 이용 - 소수점 뒤는 아무런 숫자
[0-9]
가 오고 - 그 숫자의 개수는 1개 이상일 때
*
- 그리고 좌표 사이의
공백 1개
여기서 간단한 응용
만약 좌표 사이의 공백이 하나 이상으로 불규칙 한 경우에는?
-
한칸 _공백 다음_에
*
을 달아주면 된다.6\.[0-9]* *6\.[0-9]* *12\.[0-9]
정규식은 복잡해 보이지만, 규칙을 알고 많은 예제들을 하나씩 살펴보면 조금씩 익숙해질 수 있습니다.
Input 파일을 만들고, Output 파일을 처리할 때 유용하게 활용해보시기 바랍니다.
완성 표현
grep '6\.[0-9]* *6\.[0-9]* *12\.[0-9]' Filename
유용한 옵션: 해당 라인 함께 출력하기 -n
grep -n '6\.[0-9]* *6\.[0-9]* *12\.[0-9]' Filename