Замена нескольких пустых строк одной пустой строкой в ​​vim / sed

Вопрос более или менее говорит обо всем. Я знаю, что /^$/d удалит все пустые строки, но я не вижу, как сказать «заменить две или более пустых строк одной пустой строкой»,

Есть идеи?

  • Разделите буфер между разделителями tmux / vim
  • изменение цвета vim между | |
  • Автозапуск Vimrc не работает
  • Проблемы с получением помощи в vim
  • Использование Regex в vim movment
  • Vim: VimRepress и Wordpress.com - как вставлять фрагменты кода?
  • Настройте bash и / или vim для запуска source ~ / .bashrc каждый раз, когда я закончу его редактирование
  • Помогите понять изменение в Vim
  • 5 Solutions collect form web for “Замена нескольких пустых строк одной пустой строкой в ​​vim / sed”

    Если вы не стреляете в vim или sed для какого-то другого использования, у кота действительно есть простой встроенный способ свернуть несколько пустых строк, просто используйте cat -s .

    Если вы уже были в vim и хотели остаться там, вы могли бы сделать это с помощью внутреннего поиска и замены, выпустив :%s!\n\n\n\+!^M^M!g (The ^ M – это визуальное представление новой строки, вы можете ввести его, нажав Ctrl + v Enter ), или сохраните себя, набрав, просто обстреливая cat :%!cat -s .

    Используйте \n чтобы указать новую строку в шаблоне поиска. Используйте Ctrl + M в заменяющем тексте или обратную ссылку. См :help pattern и :help sub-replace-special (связанный с :help :s ).

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

    Если в Vim просто сделайте это:

     :%!cat -s 

    Использование Perl:

     perl -00 -pe '' 

    -00 командной строки -00 включает режим абзаца slurp on, что означает, что Perl читает текст по частям, а не по строкам.

    Я знаю, что это глупый код, но я решил решить эту проблему менее чем за 10 минут, и это сработало

     for file in /directory/* do originalname=$file us='_' tempname=$file$us echo $originalname mv $originalname $tempname uniq $tempname $originalname rm $tempname done 
    Linux и Unix - лучшая ОС в мире.