Como adicionar uma linha extra que também tenha um padrão no arquivo contendo um padrão na linha anterior?

1

Eu tenho um arquivo -

something
\title{\hypertarget{A64L}{A64L(3)}}
something
\title{\hypertarget{MALLOC}{MALLOC(3)}}
something
\title{\hypertarget{STRCMP}{STRCMP(3)}}  

A palavra em {} pode ser qualquer coisa, mas é igual em {} consecutivo.
Eu quero pegar

something
\title{\hypertarget{A64L}{A64L(3)}}
\addcontentsline{A64L}
something
\title{\hypertarget{MALLOC}{MALLOC(3)}}
\addcontentsline{MALLOC}
something
\title{\hypertarget{STRCMP}{STRCMP(3)}}
\addcontentsline{STRCMP}  

Eu tentei seguir, mas falhei.

sed -e /\\title\{\\hypertarget\{.*\}\{.*\(3\)\}\}/a\\\addcontentsline\{\&\} filename

Esta é uma extensão de link

    
por alhelal 01.01.2018 / 03:38

2 respostas

1

Não sei exatamente o que você está tentando capturar, mas

$ sed 's/\title{\hypertarget\({[^}]*}\).*/&\n\addcontentsline/' file
something
\title{\hypertarget{A64L}{A64L(3)}}
\addcontentsline{A64L}
something
\title{\hypertarget{MALLOC}{MALLOC(3)}}
\addcontentsline{MALLOC}
something
\title{\hypertarget{STRCMP}{STRCMP(3)}}  
\addcontentsline{STRCMP}
    
por 01.01.2018 / 03:58
1
j='grep -o "{[0-9A-Z]\{4\}}" k1.txt | sed -r "s/\s+//g" | sed '/^$/d'';
grep -B1 "$j" k1.txt  | sed "/title/s/.*/&\n\\addcontentsline$j/g";
for i in 'grep -o "{[A-Z]\{6\}}" k1.txt'; do
  grep -B1 $i k1.txt| sed "/title/s/.*/&\n\\addcontentsline$i/g";
done 

Saída:

something
\title{\hypertarget{A64L}{A64L(3)}}
\addcontentsline{A64L}
something
\title{\hypertarget{MALLOC}{MALLOC(3)}}
\addcontentsline{MALLOC}
something
\title{\hypertarget{STRCMP}{STRCMP(3)}}
\addcontentsline{STRCMP}
    
por 01.01.2018 / 11:44