vim/sed에서 여러 개의 빈 줄을 단일 빈 줄로 바꾸기

vim/sed에서 여러 개의 빈 줄을 단일 빈 줄로 바꾸기

질문은 어느 정도 모든 것을 말해줍니다. 이것이 모든 빈 줄을 제거한다는 것을 알고 있지만 /^$/d"두 개 이상의 빈 줄을 하나의 빈 줄로 대체"라고 말하는 방법을 모르겠습니다.

어떤 아이디어가 있나요?

답변1

다른 목적으로 vim이나 sed를 실행하지 않는 경우 cat에는 실제로 여러 개의 빈 줄을 축소하는 간단한 내장 방법이 있으므로 cat -s.

이미 vim에 있고 거기에 머물고 싶다면 내부적으로 검색하고 다음을 실행하여 바꿀 수 있습니다. ( ^M은 개행 문자의 시각적 표현입니다. +를 :%s!\n\n\n\+!^M^M!g클릭하여 입력할 수 있습니다 .) 또는 직접 저장하면 됩니다. 고양이: 입력하려면 .CtrlvEnter:%!cat -s

답변2

\n검색 패턴에서 개행 문자를 나타내는 데 사용됩니다 . 대체 텍스트에 Ctrl+ 또는 역참조를 사용하세요. M바라보다:help pattern그리고:help sub-replace-special(링크에서:help :s).

%s/\(\n\n\)\n\+/\1/

답변3

Vim의 경우 다음을 수행하세요.

:%!cat -s

여러 개의 빈 줄을 하나로 압축 -s하도록 플래그를 지정합니다 .cat

답변4

sed(GNU sed) 4.2.2 사용:

sed -r '
  /^\s*$/ { 
    # blank line
:NEXT
    N # append next line to pattern space - if none, autoprint PS and exit
    s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
  }
  # else, autoprint PS and next/exit
' < $MYFILE

관련 정보