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.