sed를 사용하여 빈 줄을 삭제하려고합니다.
sed '/^$/d'
그러나 나는 운이 없다.
예를 들어 다음 줄이 있습니다.
xxxxxx
yyyyyy
zzzzzz
나는 그것이 다음과 같이되기를 원합니다.
xxxxxx
yyyyyy
zzzzzz
이것에 대한 코드는 무엇입니까?
답변
“빈”줄에 공백이나 탭이있을 수 있습니다. 공백 만 포함하는 모든 행을 제거 하려면 POSIX 클래스 를 사용하십시오 sed
.
sed '/^[[:space:]]*$/d'
ERE를 사용하는 짧은 버전 (예 : gnu sed) :
sed -r '/^\s*$/d'
sed는 PCRE를 지원 하지 않습니다 .
답변
awk
해결책이 없습니다 .
awk 'NF' file
다음을 반환합니다.
xxxxxx
yyyyyy
zzzzzz
어떻게 작동합니까? 때문에 NF
, 그 라인이 비어있는 ‘필드의 수 “에 대한 스탠드 그 AWK False로 0을 평가하고 더 선이 인쇄되지 않습니다 때문에, 0 fiedls이있다; 그러나 필드가 하나 이상 있으면 평가는 참이며 awk
기본 조치를 수행합니다. 현재 행을 인쇄하십시오.
답변
sed '/^$/d'
파일을 수정 하시겠습니까? 그렇다면 -i
플래그를 사용해야합니다 .
아마도 그 줄이 비어 있지 않을 수도 있습니다. 그렇다면이 질문 을보십시오 .txt 파일에서 빈 줄을 제거하고 줄의 시작과 끝에서 공백을 제거하십시오 .
답변
sed
grep
어 wk
답변
나는 이것이 가장 쉽고 빠른 것이라고 믿습니다.
cat file.txt | grep .
모든 공백 줄을 무시 해야하는 경우 다음을 시도하십시오.
cat file.txt | grep '\S'
예:
s="\
\
a\
b\
\
Below is TAB:\
\
Below is space:\
\
c\
\
"; echo "$s" | grep . | wc -l; echo "$s" | grep '\S' | wc -l
출력
7
5
답변
여기 에 허용 된 답변과 위
의 허용 된 답변의 도움으로 다음 을 사용했습니다.
$ sed 's/^ *//; s/ *$//; /^$/d; /^\s*$/d' file.txt > output.txt
`s/^ *//` => left trim
`s/ *$//` => right trim
`/^$/d` => remove empty line
`/^\s*$/d` => delete lines which may contain white space
이것은 모든 기반을 다루고 내 요구에 완벽하게 작동합니다. 오리지널 포스터 @Kent and @kev
답변
당신은 말할 수 있습니다 :
sed -n '/ / p' filename #there is a space between '//'