Eu usaria apenas o grep (aqui assumindo o GNU grep
):
grep -o "'[^']*\.swf'" input.txt > output.txt
Explicação
-
-o
imprime 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.txt
redirecionará 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.txt
lerá deinput.txt
e, 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 +2
ou 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. -
grep
corresponderá às linhas que terminam comgrep '\.swf$'
.