Que caracteres especiais o grep analisa por padrão? [duplicado]

1

Eu sei que há o -E flag que trata o "termo de pesquisa" como uma expressão regular. No entanto, parece que, mesmo sem isso, grep está tratando alguns caracteres especialmente.

Por exemplo, se eu correr:

grep "$var" *

Em seguida, ele lista todas as linhas do arquivo (suponho que esteja usando $ como expressão de fim de linha). O período também parece procurar por qualquer caractere sob certas circunstâncias.

Então, quais são os caracteres especiais que eu preciso ter cuidado ao usar grep ?

    
por DisgruntledGoat 22.09.2011 / 00:58

1 resposta

1

Por padrão, grep usa expressões regulares básicas (BRE). Dê uma olhada em qualquer recurso sobre o BRE (por exemplo, man grep e man regex ) para aprender a sintaxe. O $ em "$var" não está sendo passado para grep porque é especial para o shell. Se você tiver uma variável de shell chamada var , sua expansão é o que grep realmente vê. Se você não o fizer, então grep apenas recebe uma string vazia que combina com todos os lugares.

EDIT: A partir da especificação POSIX para BRE , os caracteres especiais são * , ^ , $ , . , [ , \

Se você quiser apenas combinar cadeias literais sem ter que se preocupar com quais caracteres têm um significado especial em BREs, você provavelmente deveria estar usando fgrep / grep -F (eles são a mesma coisa; ambos combinam cadeias fixas).

    
por 22.09.2011 / 01:09