grep para aspas simples e aspas duplas em uma string

4

Estou tentando escrever um grep que encontre os nomes de arquivo .epl ou os caminhos de arquivo em um determinado arquivo.

Eu tentei os seguintes regexs

Parte 1: REGEX Usado grep -rEco "/(.+).epl|(.+).epl" ./index.epl Resultado obtido

url => 'xyz.epl
url => 'xyz.epl
url => 'xyz.epl
url => "packet/xyz.epl
url => "/web/abc/xyz.epl
url => qq{/web/abc/xyz.epl
url => '/web/abc/def/xyz.epl
url => '/web/abc/def/xyz.epl
url => 'xyz.epl
url => 'xyz.epl
$url = "/web/abc/def/xyz.epl
var requestURL = "xyz.epl
var requestURL = "xyz.epl
<a style="float:left;" href="xyz.epl
[- Execute('components/xyz.epl
Welcome, <a href="xyz.epl
[- Execute('components/xyz.epl
<a href="xyz.epl
[- Execute(''components/xyz.epl'

No entanto, quero que corresponda apenas ao seguinte (com ou sem as aspas anteriores)

'xyz.epl(OR xyz.epl)
'xyz.epl
'xyz.epl
"packet/xyz.epl(OR packet/xyz.epl)
"/web/abc/xyz.epl(OR "/web/abc/xyz.epl)
/web/abc/xyz.epl
'/web/abc/def/xyz.epl
'/web/abc/def/xyz.epl
'xyz.epl
'xyz.epl
"/web/abc/def/xyz.epl
"xyz.epl
"xyz.epl
"xyz.epl
'components/xyz.epl
"xyz.epl
'components/xyz.epl
"xyz.epl
'components/xyz.epl

Para obter a saída desejada, tentei grep -rEoc '\/(.+)\.epl|[\"\'](.+)\.epl' . No entanto, isso me dá uma "incomparável". " erro.

Eu removi as aspas em torno do regex e recebi "Badly placed () '."

    
por AnyaK 25.05.2016 / 18:19

2 respostas

1

Dada a sua entrada de amostra, isso produziu o resultado desejado:

grep -Eo '["'\'']?[/[:alnum:]]+\.epl'

Faz algumas suposições sobre os caracteres em seus nomes de arquivos (letras, números, barras) - sinta-se à vontade para lançar mais caracteres nesse conjunto de colchetes.

    
por 25.05.2016 / 20:11
1

Acho que isso será feito para você:

grep -oP "(?<=['\"]|qq{)[xp/c][^\']+" ./index.epl

Isso diz:

-o Mantenha apenas a parte correspondente.
-P Use o estilo regex Perl (precisamos disso para o lookbehind)
"..." Use aspas duplas, já que você não pode escapar do single dentro do <único < br> (?<=...) Inicia um grupo lookbehind positivo. Isso significa que o que quer que combinemos muito também tem esse padrão logo antes, mas o "antes da parte" não faz parte do padrão que queremos manter.
[\'\"] Coincidir com um dos: simples ou dupla citação
|qq{ OU corresponde à cadeia literal 'qq {'
Depois de encontrar essa correspondência de padrão:
[xp/c] Corresponde a um dos x, p, / ou c. (Isso não é tão bom, mas você tem um pequeno número de casos para verificar.) [^ ] + 'Qualquer coisa que não seja um backtick, 1 ou mais vezes

EDITAR: Se você quiser que as aspas simples ou duplas façam parte do padrão, será um pouco mais complicado, já que você não quer que o qq{ seja incluído de nenhuma maneira. .

    
por 25.05.2016 / 18:43