여기에 비슷한 질문이 있지만 그 중 어느 것도 내 문제와 정확히 일치하지 않습니다.
sed를 사용하여 파일의 첫 번째 빈 줄만 삭제하는 방법은 무엇입니까?
내가 가지고 있다고 가정하자
a
b
c
그리고 나는 원한다
a
b
c
출력으로.
답변1
sed
FAQ 보기여기:
$ sed '0,/^$/{//d}' lines
a
b
c
d
사용할 공백이 있는 줄을 고려하려는 경우 실제로 빈 줄만 제거됩니다.
$ sed '0,/^[[:space:]]*$/{//d}' lines
대신에.
답변2
sed
다음을 사용하여 첫 번째 빈 줄을 읽은 다음 다음 cat
을 사용하여 나머지 줄을 읽을 수 있습니다 . 이는 대용량 파일에 가장 효율적입니다.
{ sed -n '/./!q;p'; cat; } < the-file
그러나 일반 파일에서만 작동합니다(파이프에서는 작동하지 않습니다. 데이터를 청크로 읽으며 입력을 검색할 수 없으면 sed
호출 다음 줄을 찾을 수 없기 때문입니다). q
@peterph가 지적했듯이 GNU sed
버전 4.2.2 이상 에서는 -u
GNU가 한 번에 한 바이트씩 입력을 읽고(한 번에 한 줄씩 출력하도록) 플래그를 추가 sed
하고 파이프 문제를 제거할 수 있습니다(성능이 저하되더라도). 성능).