Многострочный (в одном абзаце) шаблон заменить использование 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 
  • Как поймать все после префиксной фразы с SED?
  • Удаление прокомментированных строк в текстовом файле с помощью sed
  • SED, чтобы найти и заменить точное слово, начинающееся с $
  • Переключение с grep на sed
  • grep + регулярное выражение для соответствия слову, расположенному перед последним словом
  • Как удалить несколько строк из файла с помощью оболочки
  • Как исправить непревзойденное количество блоков в 2 столбцах
  • Как усечь только заданную длину столбца?
  • Как напечатать несколько строк из середины файла с помощью команд оболочки unix?
  • Запись файлов grep за последние 30 минут
  • sed ведет себя по-разному в FreeBSD и Linux?
  • Linux и Unix - лучшая ОС в мире.