Удалите 2 и 3 новых строки в текстовом файле, но не 1

Попытаться перезагрузить свой файл конфигурации?

Ctrlb, затем: :source-file ~/.tmux.conf

1
12.08.2013, 19:49
2 ответа

Или вариант жемчуга:

perl -e 'undef $/; $_=<>; s/^\n{2,}//mg; print' < infile

сброс (undef) разделитель полей ($/). Это делает $_=<> присвойте содержание STDIN в $_. Затем поиск и замена 2 или больше новых строки ни с чем (s/^\n{2,}//mg;), и print вывод (эти операции сделаны на $_). m опция на поиске s/// выше позволяет новую строку (несколько выравнивают), соответствие и g применяет шаблон для всех происшествий в строке (и не просто первое).

Если это должно только работать над 2 и 3 новыми строками (и не эффект 4, или 5 и т.д.) затем используют s/^\n{2,3}//mg;

Для файла формата DOS:

perl -e 'undef $/; $_=<>; s/^(\r\n){2,}//mg; print' < infile
1
27.01.2020, 23:39
  • 1
    Спасибо, работавшее действительно хороший. Это имело очень быстрое время выполнения к. Единственная мелочь, и это не имеет значения для меня, был то, что это не удалило 2 новых строки в начале файла. –  Farmor 13.08.2013, 01:01
  • 2
    , Нечетный, я протестировал на это в своих тестах :) Могут быть те строки, содержат пробел (вкладки, пробелы?) Довольный это не была проблема! –  Drav Sloan 13.08.2013, 02:53
  • 3
    Вы были корректны, это удаляет первую строку также, если отформатировано с utf8. Печально загруженный файл был закодирован utf8 с BOM. Удаление BOM и сценария хорошо работало также для первых двух строк. –  Farmor 13.08.2013, 03:33
  • 4
    То же как perl -0777 -pe's/^\n{2,}//mg'. Нужно отметить, что, так как это хлебает целый файл в памяти, это не адаптировано к огромным файлам. –  Stéphane Chazelas 13.08.2013, 09:07
  • 5
    я не думаю, что вариант работает, потому что не делает -p разделите STDIN через новые строки (и таким образом, Вы не можете сделать многострочного соответствия?) –  Drav Sloan 13.08.2013, 14:04
awk -vRS='\r\n' -vORS='\r\n' '
  /./||!++n{if (n==1) print "";print;n=0}
  END{if (n==1) print ""}'
1
27.01.2020, 23:39

Теги

Похожие вопросы