Многострочный (в одном абзаце) шаблон заменить использование awk или sed

$cat test.txt blablabla ```{r} blabla ``` blablabla blablabla blablabla ```{r} blablabla blablabla imname <- "FIGNAME1" saveflag <- savepdf(imname) ``` ```{r} blablabla blablabla imname <- "FIGNAME2" saveflag <- savepdf(imname) ``` blablabla 

Я хочу заменить:

 \`\`\`{r}** to **\`\`\`{r figname:FIGNAME1}**, where **FIGNAME1** comes from the line start with **imname**, can be match by **imname.\*".\*"**. 

Ожидаемый результат:

 blablabla ```{r} blabla ``` blablabla blablabla blablabla ```{r figname:FIGNAME1} blablabla blablabla imname <- "FIGNAME1" saveflag <- savepdf(imname) ``` ```{r figname:FIGNAME2} blablabla blablabla imname <- "FIGNAME2" saveflag <- savepdf(imname) ``` blablabla 

Я попробовал sed но не успел.

 sed -e '/\`\`\`.*r/{:a;N;/^$/p;/imname.*".*"/!{$!ba};s/\`\`\`.*r\(.*imname.*\)"\(.*\)"/```{r figname:\2\1"\2"/}' test.txt 

One Solution collect form web for “Многострочный (в одном абзаце) шаблон заменить использование awk или sed”

 sed ' /{r}/{ #if line consist {r} :1 #mark No.1 $!{ #if not last line: N #append next line /\n\n/!b1 #if not empty line } #+return to mark No.1 } #=collect one paragraph(from {r} to empty line) s/}.*imname <- "\([^"]*\)/ figname:\1&/ #add text after "imname" to "r" ' test.txt 
  • Удалите первые n байтов файлов
  • Удалить строки из файла с разделителями табуляции с отсутствующими значениями
  • Фильтрация журнала на последней букве в строке
  • Подсчитайте ненулевые числа для каждой строки второго столбца в текстовом файле
  • Использование буквальных пустых фигурных скобок {} внутри команды sed из find -exec
  • Перемещение строк данных в один столбец при сохранении заголовков строк
  • Извлеките и форматируйте данные с помощью `cut` и` awk`
  • Удалить строку, если два шаблона найдены в одной строке
  • bash merge 2 списки удаления дубликатов
  • Очистка объединенных файлов XML
  • Использование grep / sed / awk для классификации записей в файле журнала
  • Interesting Posts

    Есть ли файловая система, которая позволяет мне вставить некоторый блок в середине файла в O (1)?

    crontab для команды запускать каждую неделю и три месяца?

    Как запустить программу при загрузке?

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

    Сдвиг GNOME 3 верхний левый горячий угол на левый край экрана

    Как я могу сделать полноэкранные перекрестия, расположенные по указателю?

    perl regex заменяется глобально, если глобальный не выбран

    Почему запуск rxvt-unicode с расширением perl включен по умолчанию, хотя я построил его с помощью «–enable-perl» и даже «–enable-everything»?

    Удаленное выполнение SSH – сервер проверки может это сделать?

    3G-соединение с wvdial не получает IP, выходы с кодом 16

    Что такое хороший терминал X не из основной среды окна?

    Проверьте, подключены ли клавиатура и мышь

    Можете ли вы представить пример использования для `zrun`?

    logrotate не будет обрезать исходный файл

    Как я могу безопасно удалить диск SATA из работающей системы?

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