Com grep -P
/ pcregrep
, usando uma perspectiva positiva e uma perspectiva positiva:
grep -P -o '(?<=STRING1).*?(?=STRING2)' infile
no seu caso, substitua STRING1
por filename-
e STRING2
por \.tar\.gz
Se você não tem acesso a pcregrep
e / ou se o grep
não suporta -P
, você pode fazer isso com sua ferramenta de processamento de texto favorita. Aqui está uma maneira portátil com ed
que fornece a mesma saída:
ed -s infile <<\IN
g/STRING1/s//\
&/g
v/STRING1.*STRING2/d
,s/STRING1//
,s/STRING2.*//
,p
IN
Como funciona: uma nova linha é anexada a cada STRING1
ocorrência (então agora há no máximo uma ocorrência por linha), então todas as linhas que não coincidirem com STRING1.*STRING2
serão excluídas; nos restantes, mantemos apenas o que está entre STRING1
e STRING2
e imprimimos o resultado.