Padrão Multiline (em um parágrafo) substitua use awk ou sed

2
$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

Eu quero substituir:

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

Resultado esperado:

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

Eu tentei sed , mas não obtive sucesso.

sed -e '/\'\'\'.*r/{:a;N;/^$/p;/imname.*".*"/!{$!ba};s/\'\'\'.*r\(.*imname.*\)"\(.*\)"/'''{r figname:""/}' test.txt
    
por Ming Su 01.03.2016 / 17:34

1 resposta

3
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:&/ #add text after "imname" to "r"
' test.txt
    
por 01.03.2016 / 19:35