![두 줄 사이에 빈 줄이 하나만 있으면 빈 줄을 삭제하고, 빈 줄이 두 개 있으면 빈 줄 하나만 삭제합니다.](https://linux55.com/image/145575/%EB%91%90%20%EC%A4%84%20%EC%82%AC%EC%9D%B4%EC%97%90%20%EB%B9%88%20%EC%A4%84%EC%9D%B4%20%ED%95%98%EB%82%98%EB%A7%8C%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20%EB%B9%88%20%EC%A4%84%EC%9D%84%20%EC%82%AD%EC%A0%9C%ED%95%98%EA%B3%A0%2C%20%EB%B9%88%20%EC%A4%84%EC%9D%B4%20%EB%91%90%20%EA%B0%9C%20%EC%9E%88%EC%9C%BC%EB%A9%B4%20%EB%B9%88%20%EC%A4%84%20%ED%95%98%EB%82%98%EB%A7%8C%20%EC%82%AD%EC%A0%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내가 얻는 db2 출력은 다음과 같습니다.
this is testing 1
this is testing 2
this is testing 4
db2는 쿼리의 출력으로 출력을 제공하고 쿼리에 데이터가 없는 경우 빈 행을 제공합니다.
각 출력 후에 추가 빈 줄을 제거하고 싶습니다.
sed -i '/^$/d' file.txt
빈 줄을 제거하는 것이 가능하다는 것을 알고 있습니다 . 데이터가 포함된 각 행 다음에 빈 행 하나를 제거하는 방법이 있습니까?
원하는 출력은 다음과 같습니다.
this is testing 1
this is testing 2
this is testing 4
답변1
이는 특정 문자 뒤의 개행 문자만 제거합니다(텍스트 줄 뒤의 첫 번째 개행 문자만 제거).
sed -n '$!N;s/\(.\)\n/\1/;P;D' file
답변2
파일이 메모리에 들어갈 만큼 작은 경우 다음 명령을 사용하여 파일을 삭제 perl
하고 공백이 아닌 문자와 다른 줄 바꿈 뒤의 줄 바꿈을 제거할 수 있습니다.
$ perl -0pe 's/(\S\n)\n/$1/g' file
this is testing 1
this is testing 2
this is testing 4
답변3
$ awk '{ print; if (length) getline }' file
this is testing 1
this is testing 2
this is testing 4
결과에 내용이 있으면 결과를 인쇄하고 그 뒤의 빈 줄을 읽습니다. 빈 결과의 경우 추가 행을 건너뛰지 않습니다.
여러 개의 연속된 빈 줄은 여러 개의 연속된 빈 결과가 있는 경우에만 인쇄됩니다. 결과당 한 줄만 출력합니다(비어 있거나 비어 있지 않음).
$ cat file
this is testing 1
this is testing 2
this is testing 5
$ awk '{ print; if (length) getline }' file
this is testing 1
this is testing 2
this is testing 5
답변4
Awk를 사용하면 레코드 구분 기호를 이중 개행 문자로 설정한 다음 기본 단일 개행 출력 레코드 구분 기호를 사용하여 각 레코드를 인쇄할 수 있습니다.
POSIX Awk를 사용하면 마지막 레코드 뒤에 추가 줄바꿈이 발생합니다. GNU Awk( gawk
)가 있는 경우 실제 입력 레코드 구분 기호가 비어 있을 때 빈 출력 레코드 구분 기호를 설정하여 이를 방지할 수 있습니다.
$ gawk -vRS='\n\n' 'RT=="" {ORS=""} 1' file.txt
this is testing 1
this is testing 2
this is testing 4