метки тега 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} 

  • Как удалить часть строки
  • Как использовать регулярное выражение с AWK для замены строки?
  • Изменить имена файлов в Makefile
  • `pwd`, но опустить первые n каталогов
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • Скопируйте первые 2 строки из файла, а затем удалите строки
  • Как удалить строку из тега в сценарии оболочки?
  • Как использовать команду sed для изменения записи файла в строке в сценарии оболочки?
  • 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 – указывает на общее количество полей линии (учитывая непустые строки)

    Interesting Posts

    Добавление пользовательской предустановленной конфигурации сборки для создания

    NFS – один файл, висящий ls

    Как установить daemontools на ubuntu или debian из источника

    Может ли файл устройства в Linux указывать на несколько файлов?

    Почему поведение динамического DNS-динамика DHCP противоречиво?

    Член группы не может писать даже с разрешением на запись

    Как запустить команду при загрузке в Fedora 26, чтобы отменить прокрутку мыши?

    Попытка получить динамическую страницу с wget без успеха

    Совершает ли солярий всегда отмену шабанга?

    Как я могу заставить команду sed выполнять постоянные изменения в файле?

    Запускать скрипт один раз в день с помощью systemd

    Скрипт с затвором

    Как команда «apt» отличается от «apt-get» и «aptitude»?

    Какой Linux может проверить все его файлы / пакеты, такие как debsums (Debian), но еще?

    Переключить сенсорные кнопки независимо от сенсорной панели

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