2010-12-15 8 views
7

내 .csv 파일 끝에 para 나누기가 있습니다. 다음 명령을 사용하여 파일 끝에있는 빈 줄을 제거하려고했습니다.마지막 공백 행 제거

sed -i '/^$/d' combined.csv 

하지만 작동하지 않으며 빈 줄이 계속 표시됩니다. 다음 명령을 사용하여 마지막 행을 제거 할 수 있습니다.

sed -i '$d' combined.csv 

하지만 제거하기 전에 마지막 줄이 실제로 비어 있는지 확인할 수 있습니까?

업데이트 : 각 줄은 숫자로 시작하는지 확인하려면 다음 명령을 사용하고

.

sed -i '1s/^[^0-9]*//' combined.csv 

이렇게하면 첫 번째 줄만 검사하고 나머지 줄은 검사하지 않습니다. 파일의 모든 줄을 확인하려면 어떻게합니까? 이것은 내 문제를 해결할 수 있습니다.

답변

17

시도하십시오. ${/^$/d;} 시도하면 빈 줄이 파일의 마지막 줄인 경우에만 일치합니다.

업데이트 : 두 번째 질문에 대해, 단지의 S 전에 1을 제거 즉 :이 나이 전에 어딘가에 스 니펫을 저장 찾을 수 sed -i 's/^[^0-9]*//' combined.csv

+0

덕분에,이 작품! 첫 번째 sed 명령에 대해 자세히 설명해 주시겠습니까? – dangonfast

5

. 부탁하지 마십시오 작동 방법 :

perl -i -pe "chomp if eof" combined.csv 
+2

EOF (\ n \ n)에 빈 줄이 없으면 EOF에서 마지막 \ n을 제거합니다. 이는 Unix에서 제거하면 안됩니다. –

+0

@AleksandrLevchuk : 좋은 지적이지만 쉽게 고칠 수 있습니다 :'perl -pe 'chomp if &&/^ $ /'combined.csv' – mklement0

0

은 $ 시도, 그것은 파일의 마지막 행이있을 경우에만 빈 줄을 일치 {/^$/d의}.

내가 나오지 와 그것을 시도 (GNU가 나오지도) 4.2.2하고 파일의 마지막 줄 경우 모든 빈 줄은 빈 줄뿐만 아니라 삭제되었다.

다음 명령을 찾았습니다.이 명령은 작업을 수행하는 자신을 위해 작동했습니다.

sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' 

이 명령 유용한 SED-Oneliners의 컬렉션에서입니다 : http://sed.sourceforge.net/sed1line.txt

+0

'$ {/^$/d;}'는 POSIX - 호환'sed'.'sed '$ {/^$/d;}'<<< $ 'a \ n \ nb \ n''을 시도하면 마지막 줄만 제거된다는 것을 알 수 있습니다. – mklement0

+0

당신의 대안은 뭔가 다른 일을합니다 : 그것은 마지막 것뿐만 아니라 _all_ 여분의 후행 줄 바꾸기도하고,이 경우에는 불필요하고 큰 파일에 문제가있는 _at once_ 전체 파일을 읽습니다. – mklement0

0

당신이 grep . 또는 sed '/^$/d'

그것은 파일에 빈 줄을 제거 할 수 있습니다 빈 줄을 제거하십시오. 파일에 중간에 빈 줄이 없기를 바랍니다.하지만이 경우에는 효과가 있습니다.

cat combined.csv | grep .

또는

cat combined.csv | sed '/^$/d'