sed는 특정 줄 번호 뒤의 빈 줄을 삭제합니다.

sed는 특정 줄 번호 뒤의 빈 줄을 삭제합니다.

파일 끝까지 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

관련 정보