아래와 같은 유닉스 파일이 있습니다
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
.