Linux에서 파일에서 빈 줄을 제거하는 방법

Linux에서 파일에서 빈 줄을 제거하는 방법

내 파일에 다음과 같은 공백이 포함된 출력이 있습니다.

daily/A3D05180000052121001 30698

daily/A3D05180000052200001 30698

daily/A3D05180000052203001 30698

빈 줄을 제거해야 합니다. 출력은 다음과 같아야 합니다.

daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

나는 사용하려고sed

sed -i -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' "$FILESIZE3"

하지만 작동하지 않았습니다. 누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

sed '/^[[:space:]]*$/d' file >file.modified

file이렇게 하면 완전히 비어 있거나 공백과 유사한 문자만 포함된 줄이 제거됩니다 . 이 경우 공백과 유사한 문자에는 DOS 텍스트 파일(Unix 도구로 처리할 때)의 각 줄 끝에 있는 캐리지 리턴, 탭 및 공백이 포함됩니다. 결과 데이터가 기록됩니다 file.modified.

리디렉션을 제거하고 -i대신 옵션을 사용하면 새 파일을 작성하는 대신 "내부" 수정이 이루어지지만 file이 옵션은 이식할 수 없으며 다른 Unix 시스템에서 다르게 작동할 수 있습니다(sed -i(제자리에서 편집)를 사용하여 이식성을 달성하는 방법은 무엇입니까?).

답변2

다른 사람들은 무엇을 하고 있는지 모르겠지만 sed, 그것이 당신이 찾고 있는 것이 아닌가요?

host:~ # sed -e '/^$/d' file.txt
daily/A3D05180000052121001 30698
daily/A3D05180000052200001 30698
daily/A3D05180000052203001 30698

그래도 문제가 해결되지 않으면 요구사항을 명확히 하세요.

답변3

AWK는 이렇게 말했습니다.

awk '!/^$/{ print }' infile > outfile && mv outfile infile 

답변4

vim에서는 빈 줄을 제거하기 위해 전역 명령을 사용합니다. 귀하의 경우에 도움이 될지 확실하지 않습니다.

#:[range]g/pattern/cmd

이 예제는 패턴과 일치하는 각 줄에서 cmd 명령을 실행하여 지정된 [범위](기본값은 전체 파일)에 대해 작동합니다(실행 명령은 콜론으로 시작합니다. 예: vi의 d는 삭제를 의미합니다). 귀하의 경우에는 그럴 수 있습니다

:g/^$/d

사이에 공백이나 탭이 있는 경우

:g/^[\s\t]*$/d

도움이 되었기를 바랍니다.

관련 정보