유닉스 쉘 스크립트에서 빈 줄 뒤에 이전 줄에 다음 줄을 추가하는 방법

유닉스 쉘 스크립트에서 빈 줄 뒤에 이전 줄에 다음 줄을 추가하는 방법

아래와 같은 유닉스 파일이 있습니다

abcdge
efg
bh

ggh
bhj
mkl

파일을 변경하고 다음과 같이 설정하고 싶습니다.

abcdge
efg
bhggh
bhj
mkl

의미: 각 빈 줄 뒤에는 다음 줄이 이전 줄에 추가되어야 합니다. 어떻게 구현할 수 있나요?

답변1

$ sed -e '
    $!N;$q;N
    s/\n\n//
    P;D
 ' file

패턴 공간에 3줄을 유지하고 연속된 개행 문자가 보이면 제거하세요.

답변2

이는 awk를 사용하는 모든 UNIX 시스템의 모든 쉘에서 작동합니다.

$ awk '1;END{print"\n"}' RS= ORS= file
abcdge
efg
bhggh
bhj
mkl

답변3

내가 당신을 이해한다면 아마도 이것이 당신이 찾고 있는 것일 것입니다.

sed -z 's/\n\n//g' file

산출:

abcdge
efg
bhggh
bhj
mkl

답변4

<file awk '
   {
   if (n && $0!="")
      printf "\n"
   if ($0=="")
      n=""
   else
      {n=1; p=1; printf "%s", $0;}
   }
   END {if (p) printf "\n"}
 '

비어 있지 않은 각 행은 종료 개행 문자 없이 인쇄됩니다. 이전에는 현재 줄이 비어 있지 않고 이전 줄도 비어 있지 않으면 개행 문자가 인쇄되었으므로 이 경우 이전 줄이 완성되었습니다.

마지막으로, 공백이 아닌 행이 인쇄되면 개행 문자가 마지막 불완전한 행을 종료하고 이를 완성합니다.

n그리고 p각각 "비지 않은 마지막 줄"과 "무언가 인쇄됨"을 나타내는 마커입니다.

연속된 빈 줄은 하나의 빈 줄과 같습니다. 이 행동이 당신이 원하는 것인지 모르겠습니다.

솔루션은 필터(예: 파이프)로 잘 작동해야 합니다. 입력 파일을 수정하는 데 필요한 경우 다음을 확인하십시오.변경사항을 제자리에 저장awk.

관련 정보