Как перечислить определенные строки файла

Попробуйте (также из комментария @IporSircer) вместо этого:

while true; do ~ / bin / ap ; сон 2; выполнено

2
06.08.2017, 02:43
2 ответа
perl -pe 's/^/++$a.$"/e if /^\[/... /^$/ and /^(?!\[)./' file.txt

Результаты

TITLE: hello world
SUBTITLE: document about hello world

[CONTENT 1]
1 That's a line
2 Another one
3 Row

[EXAMPLE]
4 Example line

[CONTENT 2]
5 A
6 B
7 C

Text, text, text....

Пояснение

    Опция
  • -pобрабатывает строку файла -по строке -+ включена автопечать.
  • s/^/.../eдобавит счетчик и пробел($"= разделитель списка = пробел по умолчанию)
  • /eМодификатор команды replace будет рассматривать RHS как код Perl, который необходимо оценить, а результат будет помещен в качестве результата замены.
  • Замена происходит только при выборе следующего регулярного выражения :
    • /^\[/.. /^$/=> выбирает диапазон строк, начиная со строки, начинающейся с открывающейся квадратной скобки, и заканчивая диапазоном при обнаружении пустой строки.
    • Диапазон дополнительно уточняется путем выбора строки, которая отклоняет границы диапазона, т. е. соответствует строке, которая имеет по меньшей мере один символ, и строка не начинается с открывающей квадратной скобки. Таким образом, только когда эти два встречаются, происходит замена, OTW строки отпускаются как есть.
  • Опция автопечати окончательно напечатает строку.
1
27.01.2020, 22:03

awkрешение:

awk '/^\[.+\]/{ f=1 }f && $0~/^\w/{ $0=++c FS $0 }!NF{ f=0 }1' file
  • /^\[.+\]/{ f=1 }-сопоставление строки со скобками и пометка ее флагом f

  • f && $0~/^\w/{ $0=++c FS $0 }-добавить значение счетчика для строк после строки "со скобками"

  • !NF{ f=0 }-игнорирование пустых строк и следующих за ними(f=0-сброс флага, предполагающего встречное действие)


Выход:

TITLE: hello world 
SUBTITLE: document about hello world    

[CONTENT 1]   
1 That's a line   
2 Another one   
3 Row    

[EXAMPLE]    
4 Example line   

[CONTENT 2]   
5 A  
6 B   
7 C   

Text, text, text....
2
27.01.2020, 22:03

Теги

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