sed가 연속된 개행 문자를 제거할 수 있나요?

sed가 연속된 개행 문자를 제거할 수 있나요?

빈 줄이 많은 문서가 있습니다.

둘 이상이 함께 있을 때 어떻게 삭제합니까?

나는 sed "s/\n\n//"성공하지 못한 채 파일을 시도했습니다. 오류가 없습니다.

답변1

sed '/^$/d'

sed라인 지향적이므로 "2개 이상의 특정 바이트"를 고려할 수 있습니다.와는 별개로바이트가 개행 문자인 경우. 그런 다음 전체 라인에 걸쳐 작동하는 무언가를 생각해내야 합니다.

답변2

불필요한 sed. grep할 것입니다 :

grep .

(즉, grepSPC, 점, 즉 최소한 하나의 문자를 포함하는 모든 줄과 일치합니다).

게다가:

tr -s '\n'

(개행 시퀀스를 하나로 압축합니다).

Chris가 지적했듯이 빈 줄을 제거하는 것은 (위의 첫 번째 솔루션과 여기에 초점을 맞춘 대부분의 다른 답변과 같이) 첫 번째 줄이 비어있는 경우 필요에 따라 개행 시퀀스를 압축하는 것과 동일하기 때문에 두 가지가 동일하지 않습니다. 단지 필요하다하나앞에 개행 문자가 있으면 첫 번째 줄이 비어 있습니다.

답변3

주어진 일련의 빈 줄에 대해 빈 줄을 예약하려면 다음을 수행할 수 있습니다.

sed -e '/./b' -e :n -e 'N;s/\n$//;tn'

답변4

대부분의 답변과 마찬가지로 후행 공백을 먼저 제거해야 합니다. 이중 개행을 제거하면 모든 빈 줄이 제거됩니다. (생각해보세요).

문자 그대로 해석하면 OP는 "중복된 빈 줄이 있는 경우 파일에서 모든 빈 줄을 제거"하려고 합니다.

일반적인 사용자는 "중복된 빈 줄만 제거"를 원합니다.

이렇게 하려면 먼저 후행 공백을 제거한 다음 cat -s를 통해 파이프하십시오.

sed  s/[[:space:]]*$// | cat -s

그러나 이렇게 해도 과도한 선행 또는 후행 빈 줄은 제거되지 않습니다.

관련 정보