Extrai apenas o padrão de correspondência em uma única linha de texto

0

Eu tenho um arquivo JavaScript compactado que está em um formulário de linha única e contém

bla bla bla,;xyz=require("something"),blablabla=3xyz; if (require("somethingElse") === bla bla

Eu quero extrair os something e somethingElse necessários desta "string". Aqui está o código que eu consegui construir até agora:

$ echo $script | sed 's|require(\([^)]*\))|\nget-this \n|g' | grep get-this | sed 's|get-this ||'

A saída é:

something
somethingElse

Como posso fazer isso de maneira adequada?

Editar

O código de trabalho exato é o seguinte:

cat app.min.js | grep -o 'require("[a-ZA-Z0-9]\+")' | grep -o '".*"' | sed 's/"//g'

Produz:

Wifi
net
FlashEEPROM
abc1234
DS18B20
    
por ceremcem 25.04.2016 / 10:51

2 respostas

1

grep tem uma opção -o ou --only-matching que você pode usar para isso, de man grep

   -o, --only-matching
          Print only the matched (non-empty) parts  of  a  matching  line,
          with each such part on a separate output line.

Então, para mim isso:

$ cat compressed_js_file  | grep -o 'require("[[:alpha:]]\+")'

produz

require("something")
require("somethingElse")
    
por 25.04.2016 / 11:16
1

Um caminho mais longo usando apenas awk :

awk -F "require" '{print $2 $3}' compressed_js_file | awk -F '[()"]' '{print $3"\n"$8}'

Produz:

something
somethingelse
    
por 25.04.2016 / 12:32

Tags