내 파일에 다음과 같은 공백이 포함된 출력이 있습니다.
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
도움이 되었기를 바랍니다.