[Linux 셸 스크립트] 변환처리 - 013 HTML 파일에서 특정 속성값 얻기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 변환처리 - 013 HTML 파일에서 특정 속성값 얻기

by 찬찬이 아빠 2021. 3. 5.
반응형
  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">처럼 큰따옴표로 열고 작은 따옴표로 닫는 실수를 하기도 합니다. 하지만 여기서는 단순 설명이므로 이런 특수한 경우는 제외했습니다.

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글