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}"
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 텍스트 처리 - 085 HTML 파일 문자 코드를 자동으로 판별해서 UTF-8로 인코딩된 파일로 바꾸기 (0) | 2021.04.13 |
---|---|
[Linux 셸 스크립트] 텍스트 처리 - 084 텍스트 파일에서 HTML 파일 만들기 (0) | 2021.04.13 |
[Linux 셸 스크립트] 텍스트 처리 - 082 정해진 자릿수 숫자에 하이픈 넣기(우편번호 등) (0) | 2021.04.13 |
지역화폐 147탄 - 경남 하동군(하동사랑상품권, 모바일 하동사랑상품권) (0) | 2021.04.13 |
[Linux 셸 스크립트] 텍스트 처리 - 081 오른쪽 정렬로 숫자를 표시하는 텍스트 표 만들기 (0) | 2021.04.12 |
댓글