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

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

Есть идеи?

  • Почему sed меняет разрешения файла на cifs, установленном share?
  • Как добавить новые строки из другого файла с помощью sed
  • Можно использовать параметр сценария bash?
  • извлекать текст между двумя разными совпадениями
  • идентификация слов в файле 1 и сопоставление их со вторым файлом и их печать
  • разрешить все IP-адреса в выводе команды с помощью стандартных инструментов командной строки
  • sed для удаления ведущего 91, если число равно 12 цифрам
  • Раскрашивание хвостового выхода с помощью sed
  • могут ли группы захвата регулярных выражений использоваться в команде поиска GNU?
  • Добавить кавычки и новый разделитель вокруг слов, разделенных пробелами
  • Почему «ESC» перемещает курсор обратно в vim?
  • Индивидуальный vimrc для подпапок и проектов
  • 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 - лучшая ОС в мире.