1. 사용 명령어 |
(1) expr
2. 키워드 & 사용처 |
(1) 키워드
패턴 매치, 문자열, HTML, 속성
(2) 사용처
변수 내부 문자열에서 특정 패턴과 일치하는 부분을 추출할 때 사용합니다.
3. 실행 예제 |
$ ./expr-match.sh
/about/
/sitemap/
/plan1.html
http://www.example.org/
4. 스크립트 |
#!/bin/sh
quote="[\"']" ①
match="[^\"']*" ②
while read line
do
href=$(expr "$line" : ".*href=${quote}\(${match}\)${quote}.*) ③
if [ $? -eq 0 ]; then
echo $href
fi
done < index.tml
5. 해설 |
이 스크립트는 현대 디렉터리에 있는 index..html 파일에서 HTML 태그의 href 속성을 찾아서 그 속성값을 표시합니다. HTML 파일에서 어떤 속성값을 취득하려면 패턴 매치를 써서 해당 부분을 뽑아내는 방법이 간단합니다. 셸 스크립트에서 패턴 매치하는 방법은 다양한데 여기에서는 expr 명령어를 사용하겠습니다.
expr 명령어는 덧셈 같은 수치 연산 목적으로 자주 사용하지만 "expr 변수명 : 패턴" 형식의 정규표현식에 활용해서 변수와 문자열에서 일치하는 부분을 추출하는데 사용할 수 있습니다. 한편 괄호는 이스케이프해야 하므로 실제 표기 방법은 "\(패턴\)"이 됩니다. 다음 예의 출력 결과는 "pen"입니다.
string="This is a pen."
expr "$string" : " This is a \(.*\)."
예제에서는 "href 속성은 큰따옴표 또는 작은따옴표로 시작해서 끝난다"라는 HTML 작성법을 고려해서 우선 ①에서 따옴표 부분을 표현하는 정규표현식을 준비합니다. 따옴표 기호는 이스케이프가 필요해서 패턴 안에 같이 쓰면 보기 어려우므로 이렇게 별도로 셸 변수로 정의해둡니다.
②에서는 href 속성 부분에 일치하는 정규표현식을 준비합니다. 따옴표 기호 속 문자열이므로 '큰따옴표 또는 작은따옴표 이외의 문자열'이 되므로 ^로 부정 표현 뒤에 이런 따옴표 기호를 나열합니다. ③에서 expr 명령어로 파일에서 한 줄씩 읽어서 일치 여부를 확인합니다. expr은 일치했을때만 종료 스테이터스가 0이 되므로 특수 변수 $?가 0일 때만 표시하면 href 속성값을 출력할 수 있습니다.
<주의사항>
- expr 명령어는 '무거운' 명령어라서 그다지 빠르지 않습니다. 대량의 텍ㄱ스트 처리는 sed나 awk가 낫습니다.
- 오래된 HTML이라면 <a href=doc.html>처럼 속성값이 따옴표로 둘러싸지 않은 채 그대로 적혀 있기도 합니다. 또는 <a href="doc.html">처럼 큰따옴표로 열고 작은 따옴표로 닫는 실수를 하기도 합니다. 하지만 여기서는 단순 설명이므로 이런 특수한 경우는 제외했습니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 변환처리 - 015 작은따옴표 안에서 작은따옴표 쓰기 (0) | 2021.03.05 |
---|---|
[Linux 셸 스크립트] 변환처리 - 014 값이 정수인지 확인해서 계산하기 (4) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 012 지역 변수를 함수 안에 정의해서 호출한 곳의 변수가 변경되지 않게 하기 (0) | 2021.03.05 |
[Linux 셸 스크립트] 변환처리 - 011 실행 시 변수값이 비어 있을 때 기본값을 정의해서 설정하기 (0) | 2021.03.04 |
[Linux 셸 스크립트] 사용자 인터페이스 - 010 파일 압축 시 실행 상태를 표시하는 진행바 표시하기 (0) | 2021.03.04 |
댓글