Вопрос более или менее говорит сам за себя. Я знаю, что /^$/d
будут удалены все пустые строки, но я не вижу, как сказать «заменить две или более пустых строк одной пустой строкой»
Любые идеи?
Вопрос более или менее говорит сам за себя. Я знаю, что /^$/d
будут удалены все пустые строки, но я не вижу, как сказать «заменить две или более пустых строк одной пустой строкой»
Любые идеи?
Ответы:
Если вы не используете vim или sed для какого-либо другого использования, у cat есть простой встроенный способ свернуть несколько пустых строк, просто используйте cat -s
.
Если вы уже работали с vim и хотели остаться там, вы можете сделать это с помощью внутреннего поиска и заменить, выполнив: :%s!\n\n\n\+!^M^M!g
(^ M - это визуальное представление новой строки, вы можете ввести его, нажав Ctrl+ vEnter), или сохранить себя печатать, просто обстреливая кошку :%!cat -s
.
:%!cat -s
. Узнайте что-нибудь новое каждый день!
%s!\n\n\n\+!\r\r!g
Используйте \n
для обозначения новой строки в шаблоне поиска. Используйте Ctrl+ Mв тексте замены или обратной ссылке. Смотрите :help pattern
и :help sub-replace-special
(ссылка с :help :s
).
%s/\(\n\n\)\n\+/\1/
\n
в тексте замены не работает.
Если в Vim, просто сделайте это:
:%!cat -s
man
страницы.
Использование Perl:
perl -00 -pe ''
-00
опция командной строки включает режим абзаца абзаца, что означает, что Perl читает текст абзац за абзацем, а не построчно.
С помощью 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
Я знаю, что это глупый код, но я хотел решить эту проблему менее чем за 10 минут, и это сработало
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniq
удаляет соседние равные линии Что не то, что хочет ОП.
-s
вариант cat - просто историческая справка, его нет в POSIX, но, кажется, он доступен в BSD и GNU cat.