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

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 – указывает на общее количество полей линии (учитывая непустые строки)

  • Обратная последовательность файла с инструментами POSIX?
  • Извлечение IP-адреса из текста и сохранение его в переменной
  • Отменить перемещение букв с помощью sed
  • Grep текст, соответствующий шаблону
  • Почему вывод этой команды вставки разделяется на отдельные строки с помощью отступов?
  • Проблема удаления / замены специального символа °
  • Извлечь имя группы из `id` и сохранить ее в переменной
  • Отфильтруйте пути из текстового файла, который глубже, чем их непосредственный предшественник
  • Возможно ли напечатать повторяющийся диапазон аргументов через cli из csv? (см. пример)
  • Как пропустить файл в sed, если он содержит регулярное выражение?
  • Удалите все повторяющиеся слова из строки, используя сценарий оболочки
  • Как выполнить действие только в первой строке?
  • Interesting Posts

    Как я могу воссоздать среду VT100 и подключить терминал Esprit 250C?

    Шифрование автономного пароля IMAP

    Поддержка журнала USN (журнал изменений) в драйвере NTFS-3G

    Результаты перегрева при выключении системы

    Каким пользователям разрешено регистрироваться через SSH по умолчанию?

    выскочка и супервизор используются для одного и того же?

    Как читать из трубных позиций позиционные параметры?

    Какие типы поддержки регулярных выражений поддерживают (например) отрицательный lookbehind?

    Ошибка GRUB 15, нет загрузочного меню и / boot

    История команд в Zsh

    Восстановление переписанных метаданных LVM

    tc class rate 50Kbps! = 50K / s в wget?

    Удалите повторяющиеся строки из нескольких файлов в папке: проверьте только файлы в пределах диапазона

    rsyslog не пересылает сообщения удаленному серверу rsyslog

    Использование среднего щелчка мыши для вставки текста вступает в режим вставки

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