метки тега sed

Как я могу обернуть абзацы в виде простого текста с тегами абзаца {p} before и {/p} после каждого абзаца с помощью sed ? Каждый абзац разделяется пустыми строками. Я могу использовать sed -e 's/^\s*$/<r>/ somefile.txt чтобы найти каждую пустую строку в текстовом файле, но это всегда будет вставлять {p} всюду, и я не совсем понимаю, как для их изменения. Кроме того, после последнего абзаца нет пустой строки, поэтому для последнего он ничего не сделает.

Текст ввода:

 Section 5. General Information About Project Gutenberg-tm electronic works. Description Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the US unless a copyright notice is included. 

Требуемый вывод:

 Section 5. General Information About Project Gutenberg-tm electronic works. {p} Description {/p} {p} Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. {/p} {p} Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the US unless a copyright notice is included. {/p} 

  • Извлечение строк между специальными символами
  • `pwd`, но опустить первые n каталогов
  • sed -e 's / ^ //' не работает для первой строки
  • Полосы пробелов после одиночных заглавных букв с sed
  • Редактируйте несколько строк из определенного раздела INI-файла
  • Как заменить начальный ноль пробелом в SED?
  • Grep текст, соответствующий шаблону
  • Как найти и заменить только определенное слово (которое находится в конце файла) с помощью команды оболочки?
  • 2 Solutions collect form web for “метки тега sed”

    Поскольку вы изначально запрашивали решение sed , я добавляю один:

     sed '/./{H;1h;$! d} g;/{p}$/d s#^{p}.*#&\n{/p}#;p s/.*/{p}/;h;d' somefile.txt 

    объяснение

    • строка 1: добавьте непустые строки в буфер удержания (1-я строка скопирована вместо добавления, чтобы не начинаться с новой строки). Продолжить для пустых строк или конца файла.
    • строка 2: игнорировать буферы без текста для обработки нескольких пустых строк или пустых строк в конце буфера
    • строка 3: если есть открывающий тег, добавьте закрывающий тег. Затем распечатайте.
    • строка 4: Заполните буфер удержания новым открывающим тегом.

    Я бы предложил awk- подход:

     awk 'NR>1 && NF{$0="{p}" RS $0 RS "{/p}"}1' file 

    Выход:

     Section 5. General Information About Project Gutenberg-tm electronic works. {p} Description {/p} {p} Professor Michael S. Hart is the originator of the Project Gutenberg-tm concept of a library of electronic works that could be freely shared with anyone. For thirty years, he produced and distributed Project Gutenberg-tm eBooks with only a loose network of volunteer support. {/p} {p} Project Gutenberg-tm eBooks are often created from several printed editions, all of which are confirmed as Public Domain in the US unless a copyright notice is included. Thus, we do not necessarily keep eBooks in compliance with any particular paper edition. {/p} 

    RS awk разделитель записей, по умолчанию используется новая строка \n

    NR>1 – пропускает первую строку заголовка

    NF – указывает на общее количество полей линии (учитывая непустые строки)

    Linux и Unix - лучшая ОС в мире.