sed를 사용하여 단락 압축을 푸는 방법

sed를 사용하여 단락 압축을 푸는 방법

문단 사이에 빈 줄이 있고 76자로 묶인 문단이 포함된 텍스트 파일이 있습니다. sed를 사용하여 이것을 단락당 한 줄이 있고 빈 줄이 없는 파일로 변환하고 싶습니다.

입력 예:

Start of p1
continued p1
end of p1.

Start of p2
end of p2.

Start of p3
continued p3
even more p3
end of p3.

출력 예:

Start of p1 continued p1 end of p1.
Start of p2 end of p2.
Start of p3 continued p3 even more p3 end of p3.

답변1

GNU sed 사용

$ sed ':a;N;$!{/\n$/!ba}; s/[[:blank:]]*\n[[:blank:]]*/ /g' textfile
Start of p1 continued p1 end of p1. 
Start of p2 end of p2. 
Start of p3 continued p3 even more p3 end of p3.

어떻게 작동하나요?

  • :a

    이는 라벨을 정의합니다.a

  • N

    그러면 다음 줄을 읽고 개행 문자와 함께 현재 줄에 추가합니다.

  • $!{/\n$/!ba}

    (a) 파일의 끝에 있지 않은 경우그리고(b) 현재 줄이 비어 있지 않으면 레이블로 다시 점프(분기)합니다.a

  • s/[[:blank:]]*\n[[:blank:]]*/ /g'

    여기에 오면 패턴 공간에 완전한 단락이 있습니다. 모든 줄바꿈(선택적으로 공백 앞 또는 뒤에 공백)을 찾아 공백으로 바꿉니다.

BSD/OSX sed 사용

시도해 보세요(테스트되지 않음):

sed -e :a -e 'N;$!{/\n$/!ba' -e '}' -e 's/[[:blank:]]*\n[[:blank:]]*/ /g' textfile

awk를 사용하세요

$ awk '{printf "%s ",$0} /^$/{print ""} END{print ""}' text
Start of p1 continued p1 end of p1.  
Start of p2 end of p2.  
Start of p3 continued p3 even more p3 end of p3. 

관련 정보