Explicação do código grep

1

Em um arquivo weather.xml , existe a string temp="103" . Eu corro este comando

grep -o "temp=\"[^\"]*\"" ~/.cache/weather.xml

A saída é 103 .

O que significa [^\"] ?

Obrigado

    
por Dxtr 15.06.2016 / 16:07

2 respostas

3

Nas expressões regulares, [...] indica um intervalo de caracteres para correspondência e (nesse contexto) ^ indica negação. Portanto, [^\"] significa qualquer caractere, exceto as aspas duplas literais. Portanto, "[^"]*" significa uma aspa dupla, seguida de uma seqüência de zero ou mais caracteres, exceto as aspas duplas, seguidas das aspas duplas de fechamento.

Observe que as escapadas de contrabarra são necessárias apenas porque você usou aspas duplas em torno da expressão. Você pode simplificá-la para

grep -o 'temp="[^"]*"' ~/.cache/weather.xml

Se você deseja que ele gere apenas a leitura da temperatura numérica, você pode usar um RE compatível com Perl em vez

grep -Po 'temp="\K[^"]*'
    
por steeldriver 15.06.2016 / 16:34
1

isto significa - pule uma ocorrência de aspas duplas.

% bl0ck_qu0te%     
por saikat tapu 15.06.2016 / 16:11