Eu usaria apenas o grep (aqui assumindo o GNU grep ):
grep -o "'[^']*\.swf'" input.txt > output.txt
Explicação
-
-oimprime apenas a parte correspondente, não a linha inteira. -
"'[^']*\.swf'"é o padrão a ser correspondido, colocado em", para que você possa ter'nele. Ele corresponde a um'inicial, seguido por[^']*, que é um número indeterminado de caracteres que não são', seguido por.swf(NB você tem que escapar do.como\., pois.tem um significado especial em expressões regulares. -
input.txté o arquivo de entrada para ler. -
> output.txtredirecionará a saída para este arquivo. Se você remover essa parte, poderá visualizar a saída na tela.
Alternativa
Se o GNU grep não estiver instalado, você pode tentar o seguinte (inspirado pela substituição do Terdon ).
tr -d '\n' <input.txt | tr "'" '\n' | head -n -1 | tail -n +2 | grep '.*\.swf$' > output.txt
Explicação
-
tr -d '\n' <input.txtlerá deinput.txte, em seguida, removerá todas as quebras de linha (\n). -
tr "'" '\n'converterá todos os'em quebras de linha. Isso significa que cada linha foi anteriormente cercada por'. -
%código%. No entanto, se o arquivo de texto original começasse com
head -n -1 | tail -n +2ou terminasse comsomething.swf', eles estariam em sua própria linha, apesar de terem apenas um'something.swf, e seriam erroneamente detectados pelo seguinte'. Se, no entanto, a primeira ou a última string tiver as duas citações corretamente, haverá uma quebra de linha extra no início ou no final nesse estágio. Portanto, esse segmento de código retira a última linha e a primeira linha para corresponder apenas a esse cenário. -
grepcorresponderá às linhas que terminam comgrep '\.swf$'.