[Linux 셸 스크립트] 텍스트 처리 - 083 파일 크기를 줄이기 위해 자바스크립트 파일에서 빈 줄 제거하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 텍스트 처리 - 083 파일 크기를 줄이기 위해 자바스크립트 파일에서 빈 줄 제거하기

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

(1) sed

 

  2. 키워드 & 사용처

(1) 키워드

빈 줄, 경량화, 전송률, 압축

 

(2) 사용처

모바일 사이트 등 전송량을 조금이라도 줄여야 하는 웹사이트 파일을 경량화하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./delline.sh
$ ls newdir/
samplejs test.js       <- 디렉터리 newdir에 현재 디렉터리 js 파일에서 빈 줄을 제거한 파일을 출력

 

 

  4. 스크립트

#!/bin/sh

 

# 변환 파일 출력용 디렉터리명

outdir="newdir"             

 

# 파일 출력용 디렉터리 확인

if [ ! -d "$outdir" ]; then                 

    echo "Not a directroy: $outdir"         

   exit 1         

fi

 

for filename in *.js             

do

    # 빈 줄 또는 스페이스나 탭 문자만 있는 줄을 sed 명령어 d로 삭제

    sed '/^[[:blank:]]*$/d' "$filename" > "${outdir}/${filename}"     

done

 

 

  5. 해설

이 스크립트는 현재 디렉터리에 있는 자바스크립트 파일(확장자 .js)에서 빈 줄 및 탭, 스페이스만 있는 줄을 삭제해서 파일 크기를 경량화합니다. 모바일용 사이트나 조금이라도 전송량을 줄이고 싶을 때 사용할 수 있습니다.

 

에서 우선 변환 후 출력용 디렉터리를 정의합니다. 여러 js 파일을 처리하므로 그것을 셸 변수 outdir에 정의한 디렉터리에 출력합니다.

 

에서 출력용 디렉터리를 확인합니다. -d는 대상이 디렉터리인지 확인하는 연산자입니다. 부정 연산자 !와 함께 써서 출력용 디렉터리가 존재하지 않거나 디렉터리가 아니면 에러를 표시하고 종료합니다.

 

에서 for문 in으로 *.js를 지정해서 현재 디렉터리의 자바스크립트 파일을 순서대로 셸 변수 filename으로 처리합니다. sed 명령어가 빈 줄 또는 탭, 스페이스만 있는 줄을 삭제해서 출력한 예입니다. sed 명령어에 /<패턴>/d로 "d"를 지정하면 패턴과 일치하는 줄을 삭제합니다.

 

삭제할 패턴에서 사용한 [[:blank:]]는 POSIX 문자 클래스입니다. 여기서 [:blank:]는 스페이스 기호나 탭 기호 등 공백에 해당하는 문자 집합입니다. 이걸 다시 [ ]로 싸서 송백 기호의 문자 클래스를 지정합니다. 뒤에 *가 있으므로 이것은 '줄 처음부터 끝까지 0번 이상 공백 문자가 이어진'줄과 일치합니다. 즉, 빈 줄 또는 탭이나 스페이스만 있는 줄이 되므로 sed 명령어 출력 결과를 리다이렉트해서 불필요한 줄만 삭제한 결과를 얻을 수 있습니다. 여기서 출력할 곳을 셸 변수 outdir로 정의한 디렉터리로 지정해서 변환한 파일을 newdir 디렉터리에 저장합니다.

 

자바스크립트 파일 크기를 줄이는 전용 툴도 많습니다. 파일 크기에 민감한 모바일 사이트라면 그런 경량화 툴을 사용하지만 여기에서는 셸 스크립트를 사용한 예를 들어보았습니다.

 

 

<주의사항>

이 스크립트는 파일 줄바꿈 코드가 LF(\n)로 전제합니다. CRLF(\r\n)라면 빈 줄에 해당하지 않습니다.

경량화 툴은 빈 줄을 삭제할 뿐만 아니라 줄바꿈 마저 제거하기도 합니다. 그런 코드를 작성하고 싶으면 를 다음처럼 바꾸면 됩니다.

sed '/^[[:blank::]]*$/d' "$filename" | tr -d '\n' > "${outdir}/${filename}"

 

 

 

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

반응형

댓글