파일 끝까지 3행 이후의 모든 빈 행을 제거하려고 합니다.
cat ${File}
1
2
3
4
5
5
6
7
8
9
sed -e '3,${s~^$~~g}' ${File}
1
2
3
4
5
5
6
7
8
9
관찰하다: 출력에는 변화가 없습니다.
원하는 출력
1
2
3
4
5
5
6
7
8
9
어떤 제안이 있으십니까?
답변1
노력하다:
sed '4,$ {/^$/d}' infile
4번째 줄부터 파일 끝까지 빈 줄을 삭제합니다.
명령의 문제점은 다시 빈 줄을 빈 문자열 s~^$~~g
( 과 동일 s~^$~~
)로 바꾸고 이를 제거하지 않는다는 것입니다.
참고: 기본 슬래시 이외의 다른 구분 기호를 사용하고 있으므로 /
이 스타일을 사용하려면 ~^$~d
첫 번째 구분 기호를 이스케이프하여 정규식의 일부가 아님을 ~
나타내야 합니다.sed
sed -e '4,${ \~^$~d }' infile
바라보다man sed
"주소"에서:
\씨정규식씨 정규식 regexp와 일치하는 행과 일치합니다. 이것씨어떤 문자라도 가능합니다.
빈 줄과 공백(탭/공백)만 포함된 줄을 제거하려면 다음을 수행할 수 있습니다.
sed '4,${ /^[[:blank:]]*$/d }' infile
답변2
또 다른 awk
해결책:
awk 'NR<=3||NF' file
이렇게 하면 줄 번호가 3 이하이거나 최소한 하나의 "필드"(기본적으로 공백이 아닌 문자가 하나 이상으로 정의됨)가 있는 모든 줄이 인쇄됩니다. 이 방법을 사용하면 "텍스트"는 포함하지 않지만 "시각적으로" 비어 있는 줄, 즉 여전히 공백이나 탭이 포함된 줄을 제외할 수도 있습니다.
답변3
sed '1,3b;/./!d'
범위 1,3으로 분기하거나 비어 있으면 삭제합니다.
답변4
해결책 awk
:
awk '((NR > 3 && $0!~/^$/) || NR <= 3) { print }' file