Atomic Habits

[리눅스] sed 편집기 - 빈 줄 제거 본문

IT/Linux-Vim

[리눅스] sed 편집기 - 빈 줄 제거

체계성 2021. 12. 12. 21:17

sed 사용법 및 옵션 상세 : ★ https://soooprmx.com/sed-%EC%82%AC%EC%9A%A9%EB%B2%95-2/

 

아래 내용 출처 : https://m31phy.tistory.com/263

 

 

sed 편집기를 이용하여 텍스트 파일의 빈 줄들을 제거하는 방법

0. 예제에서 사용할 파일

$ sed -n 'p' example.txt




apple apple apple apple apple


apple apple apple apple apple


apple apple apple apple apple

apple apple apple apple apple


MELON apple apple apple apple



1. 빈 줄 제거하기 

$ sed '/^$/d' example.txt

   a. d 명령(delete)을 사용해서 빈줄이 나타나는 줄을 삭제함 

 

$ sed '/^$/d' example.txt
apple apple apple apple apple
apple apple apple apple apple
apple apple apple apple apple
apple apple apple apple apple
MELON apple apple apple apple

  - 파일의 모든 빈 줄이 삭제됨 

2. 시작 부분의 빈 줄 지우기

$ sed '/./,$!d' example.txt

   a. 주소를 사용해서 sed 편집기가 처리할 부분을 할당 
     - /./ : 문자를 포함한 한 줄 
     - $: 데이터 스트림의 끝 
     - /./,$: 문자를 포함한 한 줄 (문자가 시작하는 첫번째 줄)부터 파일의 끝까지가 범위 

       /./ : 문자 포함한 첫 행(정규식)     , : 부터         $ : 파일의 끝
   b. !d: 주소 부분을 제외한 나머지를 삭제( ! : 제외 )
     - 즉, 문자가 시작하는 첫번째 줄 이하의 빈칸은 삭제된다. 

$ sed '/./,$!d' example.txt
apple apple apple apple apple


apple apple apple apple apple


apple apple apple apple apple

apple apple apple apple apple


MELON apple apple apple apple



    - 앞에 있던 빈줄은 삭제되었지만, 맨 뒤에 있는 빈 줄은 삭제되지 않음 

 

3. 끝에 있는 빈 줄을 삭제

$ sed '{
:start
/^\n*$/{$d; N; b start}
}' example_file

* ; 로 명령어를 구분.

* n N : 입력파일로부터 한 줄을 더 읽어들여서 패턴 공간에 복사/이어붙이기한다.

* N; 에 대한 다른 설명 https://ktdsoss.tistory.com/135

* b label : 주어진 라벨로 이동한다. 라벨명이 생략되면 스크립트의 끝으로 이동한다. (라벨은 스크립트 내에서 :label_name의 형식으로 정의한다.

 

 

Example

$ sed '{
:start
/^\n*$/{$d; N; b start}
}' example.txt




apple apple apple apple apple


apple apple apple apple apple


apple apple apple apple apple

apple apple apple apple apple


MELON apple apple apple apple

  - 파일의 뒷 부분의 빈 줄만 삭제됨 

Comments