질문은 어느 정도 모든 것을 말해줍니다. 이것이 모든 빈 줄을 제거한다는 것을 알고 있지만 /^$/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