[Linux 셸 스크립트] 텍스트 처리 - 084 텍스트 파일에서 HTML 파일 만들기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 텍스트 처리 - 084 텍스트 파일에서 HTML 파일 만들기

by 찬찬이 아빠 2021. 4. 13.
반응형
  1. 사용 명령어

(1) sed

 

  2. 키워드 & 사용처

(1) 키워드

HTML, 이스케이프, 문자 참조, 줄바꿈, 텍스트 파일

 

(2) 사용처

서버에서 텍스트 파일을 간단한 HTML 파일로 변환해서 웹 브라우저로 보고 싶을 때 사용합니다.

 

  3. 실행 예제
$ cat sample.txt
1 + 1 < 3
"Hello!"
A & B

$ ./txt2html.sh sample.txt > sample.html
$ cat sample.html      <-변환한 HTML 확인
1 + 1 &lt; 3<br>
&quot;Hello!&quot;<br>
A &amp; B<br>

 

 

  4. 스크립트

#!/bin/sh

 

# HTML에서 이스케이프가 필요한 기호를 문자 참조로 치환

# 마지막 줄 끝을 <br> 태그로 치환

sed -e 's/&/\&am;/g' \                   

-e 's/</\&lt;/g' \

-e 's/>/\&gt;/g' \

-e "s/'/\&#39;/g" \

-e 's/"/\&quot;/g' \

-e 's/$/<br>/' \                     

"$1"

 

 

  5. 해설

이 스크립트는 텍스트 파일을 간단한 HTML 파일로 변환해서 출력합니다. 서버에 있는 텍스트 파일을 웹 브라우저에서 간단히 보고 싶을 때 사용할 수있습니다.

 

원격 호스트에서 작업하다 보면 거기에 있는 매뉴얼 같은 텍스트 파일을 터미널 기기가" 아니라 웹 브라우저에서 보고 싶을 때가 있습니다. 그럴 때 긴 줄이 있으면 ID 등에서는 자동으로 단어 넘김(rwrap)을 지원하지 않아 가로 스크롤바가 표시되어서 보기 힘들어집니다.

 

HTML 파일이라면 긴 줄도 자동으로 넘겨주므로 텍스트 파일을 HTML 파일로 바꿔서 브라우저에서 표시하면 편리할 것입니다.  따라서 예제에서 텍스트 파일을 간단한 HTML 파일로 바꿔봅니다.

 

텍스트 파일을 HTML 파일로 만들려면 <html> 태그와 <head> 태그를 조합하는 등의 여러 준비가 필요합니다. 하지만 여기에서는 브라우저에만 표시되면 충분하므로 단순히 줄 끝에 <br>을 추가하는 간단한 방법을 사용합니다. 이때 불필요한 자바스크립트 같은 코드가 실행되지 않도록 HTML에서 이스케이프가 필요한 기호를 처리합니다. 이는 보안을 위한 처리이기도 합니다.

 

사용자가 웹 브라우저로 볼 프로그램에 외부에서 입력하는 값을 쓴다면 악의가 있는 공격자가 오염시킨 값이 들어 있을 가능성이 있다는 걸 늘 의식해야 합니다. 예를 들어 자바스크립트는 텍스트 파일로 보면 별 문제가 없지만 웹 브라우저에서 해석할 때는 위험한 공격 코드가 실행될지도 모릅니다. 따라서 누군가가 작성한 텍스트 파일을 웹 브라우저에서 보는 프로그램이라면 HTML 태그를 이스케이프해서 무효화하는 처리가 중요합니다. 그리고 PHP나 루비 같은 일반적인 스크립트 언어라면 전용 이스케이프 함수가 준비되어 있습니다.

 

은 sed 명령어로 여러 패턴을 한꺼번에 치환합니다. 이렇듯 처럼 sed 명령어 -e 옵션으로 패턴을 이어서 지정하면 파이프 처리를 쓰지 않아도 여러 패턴을 작성할 수 있습니다. 그리고 은 HTML에서 이스케이프가 필요한 기호를 문자 참조로 치환합니다. 이때 치환할 기호는 다음과 같습니다.

원래 기호 치환 문자
& &amp;
< &lt;
> &gt;
' &#39;
" &quot;

작은따옴표와 큰 따옴표를 치환할 때 sed 명령어 전체를 싸는 따옴표 기호에 주의해야 합니다. 예제에서는 기본적으로 모두 작은따옴표 기호로 쓰고 있는데 작은따옴표 기호 치환 "s/'/\&#39;/g"에서는 '를 이스케이프하지 않아도 되도록"로 둘러싸고 있습니다.

 

치환 패턴은 줄 끝에 <br> 태그를 추가하는 처리입니다. 셸 스크립트에서 텍스트 줄끝에 특정 문자열을 추가하는 방법은 많지만 예제에서는 sed 명령어로 처리합니다. sed 명령어에서 $가 줄 끝을 나타내므로 이것을 <br>로 치환하면 추가 가능합니다. 이것이 's/$/<br/'라는 치환 패턴입니다.

 

이 스크립트는 sed 명령어 치환 패턴을 나열한 것에 불가하지만 이런 처리를 직접 실행하면 실수하기도 하므로 스크립트로 자동화하면 좋습니다.

 

 

<주의사항>

스크립트에서 작성한 HTML 파일은 <html> 태그나 <head> 태그도 없어 제대로된 HTML 파일이 아닙니다. 단순히 텍스트를 더 보기 쉽게 만든 HTML 이라고만 이해하기 바랍니다.

다른 스크립트 언어에서 HTML 태그를이스케이프하는 함수는 다음과 같습니다.

언어 함수명
PHP htmlspecialchars
escapeHTML(CGI.pm 모듈 사용)
루비 CGI.escapeHTML

 

 

 

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

반응형

댓글