[Shell Script] HTML 파일에서 태그 속에 적힌 주석을 추출하여 그대로 실행하기

 HTML 파일에서 태그 속에 적힌 주석을 추출하여 그대로 실행하기 


파일에 적힌 문자열을 추출하여 명령어로 실행할 때 사용합니다 . 

#!/bin/sh

filename="myapp.log"
eval $(sed -n "s/<code>\(.*\)<\/code>/\1/p" command.htm)




해설

이 스크립트는 command.htm 파일안에 적힌 <code>태그를 추출하여 그 요소를 명령어로 실행합니다 . 

command. htm
<html>
    <head><title>Code List</title></head>
    <body>
     <p>This is a sample code</p>
     <code>date; ls -l $filename</code>
    </body>
</html>



스크립트에서 우선 <code>태그 부분을 패턴 매치해서 추출합니다 .
 
sed 명령어

sed -n "s/<code>\(.*\)<\/code>/\1/p" command.htm

셸 스크립트에서 일치한 부분의 문자열을 추출하는 방법입니다 . 
-n 옵션은 처리 후에 패턴 스페이스 내용을 출력하지 않도록 하는 옵션입니다 . 
그대로는 아무것도 출력되지 않아서 의미없으므로 마지막에  p 플래그를 붙여서 일치했을 때만 패턴 스페이스를 출력하도록 합니다 . 










  • 일치한 줄 중 <code> 태그 부분만 추출하고 싶으므로 후방참조\1을 사용합니다 . 
  • sed명령어의 일치 확인에서()로 둘러싼 부분 앞에서 순서대로 참조할 수 있습니다 . 
  • <code>안에 임의의 문자열.*를 ()로 둘러싸서 \1로 추출, \1 부분이 실행하고 싶은 명령어 문자열이 됩니다

이것으로 명령어 문자열을 추출하였으므로 eval을 이용하여 변수확장, 명령어 실행 합니다 . 
여기서 sed 명령어 출력은 다음과 같습니다 . 

date; ls -l $filename

eval 명령어에 이 문자열을 인수로 넘기면 셸 변수 filename이 치환되어 결과로 이런 코드가 실행 됩니다 . 

date; ls -l myapp.log


결과