Удалить несколько строк в файле

Для такого задания возможно, более полный язык как Python является лучшим соответствием. Можно назвать программы от него или сделать сомнительные дела непосредственно.

6
14.10.2015, 16:20
2 ответа

Это немного муторно с sed, но возможно:

sed -n '
:start
/^\[/{
    h
  :loop
    n
    /^\[/b start
    /^$/b loop
    x;p;g
}
p'

-n означает по умолчанию ничего не печатать. :start - это просто метка для последующего goto. Мы сопоставляем строки, начинающиеся с [ и начинаем группу ({...}) команд. Мы копируем строку на место удержания (h). Получаем следующую строку (n). Если она начинается с [, то у нас был пустой участок, поэтому переходим (b) и начинаем снова.

Если строка пустая (/^$/), читаем другую строку (goto loop). Строка не пуста, поэтому мы меняем строку на заголовок секции (x), печатаем заголовок секции (p), получаем обратно текущую строку (g) и продолжаем из группы команд печатать (p) строку. Эта последняя команда (p) также печатает заголовки, не относящиеся к разделу.

8
27.01.2020, 20:24

У меня есть следующий awk

BEGIN { empty=0 ; section = "" ; }
substr($0,1,1) == "[" { section = $0 ; next ; }
NF == 0 { if ( empty++ ) print ; section = "" ; next ; }
NF > 0  { if ( section != "" ) print section ; print ; section = "" ; }

, который будет вызываться с

awk -f pgm.awk infile > outfile

, однако, как упоминает Тердон, лучше всего использовать библиотеку, этот формат файла не является конфиденциальным, кроме того, библиотека позаботится о cr , cr / nl и nl конец строки.

2
27.01.2020, 20:24

Теги

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