문단 사이에 빈 줄이 있고 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.