Extrai um ou mais padrões de uma string

0

Eu tenho algumas linhas que parecem:

function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)

Eu gostaria de encontrar um comando que produzisse a string definida na função VAR, ou seja, algo como:

xxx yyy
zzz

Eu tentei em sed , mas pelo que entendi eu não tenho como fazer isso de uma maneira não-gananciosa.

    
por woland 19.02.2018 / 15:23

2 respostas

2

Se você tem um grep que suporta expressão regular compatível com Perl (PCRE), então você pode usar

grep -Po 'VAR\(\"\K[^\]*'

ou (mais simetricamente - usando lookbehind e lookahead)

grep -Po '(?<=VAR\(\").*?(?=\")'

Ex.

$ grep -Po 'VAR\(\"\K[^\]*'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz

Ex.

$ grep -Po '(?<=VAR\(\").*?(?=\")'
function( "((2 * VAR(\"xxx\")) - VAR(\"yyy\"))" ?name "name" ?plot t ?save t ?evalType 'point)
function("value(res VAR(\"zzz\"))" ?name "othername" ?plot t ?save t ?evalType 'point)
xxx
yyy
zzz
    
por 19.02.2018 / 15:41
0

Eu acho que você quer um regex como o grep. Algo como grep 'VAR\("[A-z0-9]*"\)' No entanto, não vai funcionar no seu caso com todos aqueles \ "s. Talvez algo ao longo das linhas grep '(^VAR(\")[A-z0-9](^\"))' | grep 'VAR\(\"[A-z0-9]*\"\)'

Eu também não uso o grep por muito tempo. :)

    
por 19.02.2018 / 15:39