grep e colchetes no texto

3

Eu armazeno arquivos baixados em um log como este:

[source] filename

Para evitar o download de um arquivo mais de uma vez, peço [source] filename antes:

if ! grep "$signature" downloaded.log > /dev/null; then
    wget ...
fi

mas iniciar minha linha com [ grep não funciona da maneira que eu preciso:

signature="[source] filename"
echo $signature | grep "$signature"
echo $signature | grep "\$signature" #trying to escape first bracket

ambos não retornam nada.

Qualquer solução inteligente?

Seria bom também não precisar alterar a troca de código para parens () , chaves {} ou o que quer que seja <>

    
por neurino 21.10.2011 / 16:38

1 resposta

7

Primeiro você tem que citar sua variável, então você deve usar a opção -F --fixed-strings para evitar interpretar os colchetes como meta-caracteres de expressões regulares:

echo "$signature" | grep -F "$signature"

Em seguida, você também deve usar a opção -q --quiet , portanto, grep sair assim que encontrar a primeira ocorrência. Isso apenas para consideração de velocidade:

if ! grep -Fq "$signature" downloaded.log; then
    wget ...
fi
    
por 21.10.2011 / 17:05

Tags