Em sistemas operacionais do tipo Unix, o comando egrep procura por um padrão de texto, usando expressões regulares estendidas para realizar a correspondência. Executando o egrep é equivalente a executar o grep com a opção -E.
Esta página cobre a versão GNU/Linux do egrep.
Syntax
egrep PATTERN
Opções
-A NUM, –após-contextos=NUM |
Imprimir linhas NUM de contexto de trailing após as linhas de correspondência. Coloca uma linha contendo — entre grupos contíguos de correspondências. |
-a, –texto | Processar um arquivo binário como se fosse texto; isto é equivalente à opção –binary-files=text. |
-B NUM, – antes do texto=NUM |
Imprimir linhas NUM do contexto principal antes de combinar linhas. Coloca uma linha contendo — entre grupos contíguos de correspondências. |
-C NUM, –context=NUM | Imprimir linhas NUM de contexto de saída. Coloca uma linha contendo — entre grupos contíguos de resultados. |
-b, –byte-offset | Imprima o byte offset no arquivo de entrada antes de cada linha de saída. |
–binary-files=TYPE | Se os primeiros bytes de um arquivo indicam que o arquivo contém dados binários, assuma que o arquivo é do tipo TYPE. Por padrão, TYPE é binário, e o grep normalmente emite ou uma mensagem de uma linha dizendo que um arquivo binário corresponde, ou nenhuma mensagem se não houver correspondência. Se TYPE for sem correspondência, o grep assume que um arquivo binário não corresponde; isto é equivalente à opção -I. Se TYPE é texto, o grep processa um arquivo binário como se fosse texto; isto é equivalente à opção -a. Atenção: grep –binary-files=text pode gerar lixo binário, que pode ter efeitos colaterais desagradáveis se a saída for um terminal e se o driver do terminal interpretar parte dele como comandos. |
–colour, –color |
Surround the matching string with the marker find in GREP_COLOR environment variable. Quando pode ser ‘nunca’, ‘sempre’, ou ‘auto’ |
-c, –count | Suprima a saída normal; em vez disso imprima uma contagem de linhas correspondentes para cada arquivo de entrada. Com a opção -v, –invert-match (veja abaixo), conte linhas não correspondentes. |
-D ACTION, –devices=ACTION |
Se um arquivo de entrada for um dispositivo, FIFO ou socket, use ACTION para processá-lo. Por padrão, ACTION é lido, o que significa que os dispositivos são lidos como se fossem arquivos comuns. Se ACTION for pulada, os dispositivos são silenciosamente pulados. |
-d ACTION, –directories=ACTION |
Se um arquivo de input for um diretório, use ACTION para processá-lo. Por padrão, ACTION é lido, o que significa que as diretórias são lidas como se fossem arquivos comuns. Se ACTION for pulado, as diretórias são silenciosamente puladas. Se ACTION for repetido, o grep lê todos os arquivos sob cada diretório, recursivamente; isto é equivalente à opção -r. |
-e PATTERN, –regexp=PATTERN |
Utilizar PATTERN como padrão; útil para proteger padrões que comecem com “-“. |
-F, –fixed-strings | Interprete PATTERN como uma lista de cordas fixas, separadas por novas linhas, que podem ser combinadas. |
-P, –perl-regexp | Interpretar PATTERN como uma expressão regular do Perl. |
-f FILE, –file=FILE | Bter padrões do FILE, um por linha. O arquivo vazio contém zero padrões, e portanto não corresponde a nada. |
-G, –basic-regexp | Interprete PATTERN como uma expressão básica regular (veja abaixo). Este é o padrão. |
-H, –com nome de arquivo | Imprimir o nome do arquivo para cada partida. |
-h, — sem nome de arquivo | Imprimir o prefixo dos nomes dos arquivos na saída quando múltiplos arquivos são pesquisados. |
–ajuda | Enviar uma breve mensagem de ajuda. |
-I | Processar um ficheiro binário como se este não contivesse dados correspondentes; isto é equivalente aos ficheiros –binary-files=without-match option. |
-i, –ignore-case | Ignorar as distinções de caixa tanto no PATTERN como nos ficheiros de entrada. |
-L, –files-without-match |
Imprimir saída normal; em vez disso imprima o nome de cada ficheiro de entrada a partir do qual nenhuma saída seria normalmente impressa. O scan pára na primeira correspondência. |
-l, –files-with-matches | Suprima a saída normal; em vez disso imprima o nome de cada ficheiro de entrada a partir do qual a saída normalmente seria impressa. O scan pára na primeira correspondência. |
-m NUM, –max-count=NUM |
Pára de ler um ficheiro após as linhas de correspondência NUM. Se a entrada é a entrada padrão de um arquivo normal, e as linhas de correspondência NUM são saídas, o grep assegura que a entrada padrão é posicionada após a última linha de correspondência antes de sair, independentemente da presença de linhas de contexto de trailing. Isto permite um processo de chamada para retomar uma busca. Quando o grep pára depois das linhas de correspondência NUM, ele emite qualquer linha de contexto de rastreamento. Quando a opção -c ou –count também é usada, o grep não emite uma contagem maior que NUM. Quando a opção -v ou –invert-match também é usada, o grep pára após a saída de NUM linhas não correspondentes. |
–mmap | Se possível, use a chamada de sistema mmap para ler a entrada, ao invés da chamada de sistema de leitura padrão. Em algumas situações, –mmap produz um melhor desempenho. Entretanto, –mmap pode causar comportamento indefinido (incluindo despejos do núcleo) se um arquivo de entrada encolher enquanto o grep estiver em operação, ou se ocorrer um erro de E/S. |
-n, –número de linha | Prefixa cada linha de saída com o número da linha dentro do seu arquivo de entrada. |
-o, — somente correspondência | Mostrar somente a parte de uma linha correspondente que corresponde a PATTERN. |
–label=LABEL | Displays input realmente vindo de input padrão como input vindo do arquivo LABEL. Isto é especialmente útil para ferramentas como zgrep, por exemplo, gzip -cd foo.gz |grep -H –label=foo algo |
–line-buffered | Use line buffering. Isto pode incorrer numa penalização de desempenho. |
-q, –quiet, –silencioso | Fique quieto; não escreva nada na saída padrão. Saia imediatamente com status zero se alguma correspondência for encontrada, mesmo que um erro tenha sido detectado. Veja também a opção -s ou –no-messages. |
-R, -r, –recursivo | Ler todos os arquivos sob cada diretório, recursivamente; isto é equivalente à opção -d recurse. Modificado por: –include=PATTERN Recurse in directories only searching file matching PATTERN. –exclude=PATTERN Recurse in directories skip file matching PATTERN. |
-s, –no-messages | Suppress error messages about nonexistent or unreadable files. Nota de portabilidade: ao contrário do GNU grep, o grep tradicional não estava de acordo com o POSIX.2, porque o grep tradicional não tinha uma opção -q e sua opção -s comportava-se como a opção -q do GNU grep. Scripts shell destinados a serem portáveis para o grep tradicional devem evitar ambos -q e -s e devem redirecionar a saída para /dev/null em vez disso. |
-U, –binário | Trate o(s) arquivo(s) como binário(s). Por padrão, sob MS-DOS e Microsoft Windows, o grep adivinha o tipo de arquivo olhando o conteúdo dos primeiros 32 KB lidos do arquivo. Se o grep decidir que o arquivo é um arquivo de texto, ele tira os caracteres CR do conteúdo do arquivo original (para fazer expressões regulares com ^ e $ funcionarem corretamente). Especificar -U anula este trabalho de adivinhação, fazendo com que todos os arquivos sejam lidos e passados para o mecanismo de correspondência literalmente; se o arquivo é um arquivo de texto com pares CR/LF no final de cada linha, isto faz com que algumas expressões regulares falhem. Esta opção não tem efeito em outras plataformas além do MS-DOS e MS-Windows. |
-u, –unix-byte-offsets | Report Unix-style byte offsets. Esta opção faz com que o grep reporte as deslocações de bytes como se o ficheiro fosse um ficheiro de texto ao estilo Unix, ou seja, com os caracteres CR despojados. Isto produz resultados idênticos aos da execução do grep em uma máquina Unix. Esta opção não tem efeito a menos que a opção -b também seja usada; não tem efeito em plataformas que não sejam MS-DOS e MS-Windows. |
-V, –versão | Imprimir o número da versão do grep para erro padrão. Este número de versão deve ser incluído em todos os relatórios de erros (ver abaixo). |
-v, –invert-match | Inverter o sentido de correspondência, para selecionar linhas não correspondentes. |
-w, –word-regexp | Selecionar apenas aquelas linhas contendo correspondências que formam palavras inteiras. O teste é que o substrato de correspondência deve estar no início da linha, ou precedido por um caractere não constituinte da palavra. Da mesma forma, deve estar no final da linha ou seguida por um caractere não constituinte de palavra. Os caracteres constituintes da palavra são letras, dígitos e o sublinhado. |
-x, –line-regexp | Selecione somente aqueles que combinam exatamente com a linha inteira. |
-y | Obsolete sinónimo de -i. |
-Z, –nulo | Saída de um byte zero (o caracter ASCII NULL) em vez do caracter que normalmente segue um nome de ficheiro. Por exemplo, o grep -lZ emite um byte zero após cada nome de ficheiro em vez da nova linha habitual. Esta opção torna a saída inequívoca, mesmo na presença de nomes de arquivos contendo caracteres incomuns como novas linhas. Esta opção pode ser usada com comandos como find -print0, perl -0, sort -z, e xargs -0 para processar nomes de arquivos arbitrários, mesmo aqueles que contêm caracteres de novas linhas. |
Expressões regulares
Uma expressão regular é um padrão que descreve um conjunto de strings. Expressões regulares são construídas analogamente a expressões aritméticas, usando vários operadores para combinar expressões menores.
Grep entende duas versões diferentes de sintaxe de expressões regulares: “básica” e “estendida”. No GNU grep, não há diferença na funcionalidade disponível usando qualquer uma das duas sintaxes. Em outras implementações, as expressões regulares básicas são menos poderosas. A descrição a seguir aplica-se a expressões regulares estendidas, que são usadas no egrep; diferenças para expressões regulares básicas são resumidas posteriormente.
Os blocos de construção fundamentais são as expressões regulares que combinam com um único caractere. A maioria dos caracteres, incluindo todas as letras e dígitos, são expressões regulares que combinam com eles mesmos. Qualquer meta-caractere com significado especial pode ser citado precedendo-o com uma barra invertida.
Uma expressão entre parênteses é uma lista de caracteres delimitada por . Ela corresponde a qualquer caractere dessa lista; se o primeiro caractere da lista é o caret ^ então corresponde a qualquer caractere que não esteja na lista. Por exemplo, a expressão regular corresponde a qualquer caractere único.
Em uma expressão de colchete, uma expressão de intervalo consiste em dois caracteres separados por um hífen (“-“). Ela corresponde a qualquer caractere único que se enquadra entre os dois caracteres, inclusive, usando a sequência de agrupamento do locale e o conjunto de caracteres. Por exemplo, no locale C padrão, é equivalente a . Muitos locales ordenam os caracteres em ordem de dicionário, e nesses locales muitas vezes não é equivalente a ; pode ser equivalente a , por exemplo. Para obter a interpretação tradicional de expressões entre parênteses, você pode usar o locale C definindo a variável de ambiente LC_ALL para o valor C.
Finalmente, certas classes nomeadas de caracteres são predefinidas dentro de expressões entre parênteses, como a seguir. Seus nomes são auto explicativos, e são , , , , , , , , , , , , e . Por exemplo, ] significa , exceto que a última forma depende do locale C e da codificação de caracteres ASCII, enquanto que a primeira é independente do locale e do conjunto de caracteres. (Note que os parênteses nestes nomes de classe são parte dos nomes simbólicos, e devem ser incluídos além dos parênteses que delimitam a lista de parênteses). A maioria dos metacaracteres perde seu significado especial dentro das listas. Para incluir um literal ] coloque-o primeiro na lista. Da mesma forma, para incluir um ^ literal, coloque-o em qualquer lugar, menos primeiro. Finalmente, para incluir um literal – colocá-lo por último.
O período . corresponde a qualquer caractere único. O símbolo \w é sinônimo de ] e \W é sinônimo de ].
O carpete ^ e o cifrão (“$”) são metacaracteres que respectivamente combinam com a string vazia no início e no final de uma linha. Os símbolos \< e \> respectivamente correspondem à cadeia de caracteres vazia no início e no fim de uma palavra. O símbolo \b corresponde à cadeia de caracteres vazia na borda de uma palavra, e \B corresponde à cadeia de caracteres vazia desde que não esteja na borda de uma palavra.
Uma expressão regular pode ser seguida por um dos vários operadores de repetição:
? | O item anterior é opcional e será correspondido no máximo uma vez. |
* | O item anterior será correspondido zero ou mais vezes. |
+ | O item anterior será correspondido uma ou mais vezes. |
{n} | O item anterior é igualado exactamente n vezes. |
{n,} | O item anterior é igualado n ou mais vezes. |
{n,m} | O item anterior é igualado pelo menos n vezes, mas não mais do que m vezes. |
Duas expressões regulares podem ser concatenadas; a expressão regular resultante corresponde a qualquer string formada pela concatenação de duas subexpressões que correspondem respectivamente às subexpressões concatenadas.
Duas expressões regulares podem ser concatenadas pelo operador infix |; a expressão regular resultante combina com qualquer string que combine com qualquer subexpressão.
Repetição tem precedência sobre a concatenação, que por sua vez tem precedência sobre a alternância. Uma subexpressão inteira pode ser incluída entre parênteses para sobrepor estas regras de precedência.
A referência \n, onde n é um único dígito, combina com a subexpressão previamente combinada pela subexpressão entre parênteses da expressão regular.
Em expressões regulares básicas os metacaracteres ?, +, {, |, (, e ) perdem o seu significado especial; em vez disso, use as versões com contrabarras \?\+, \+, \{, \|, \(, e \).
O egrep tradicional não suportava o { meta-caracter, e algumas implementações egrep suportam \{ em vez disso, então scripts portáteis devem evitar { em padrões egrep e devem usar para combinar com um {.
Tentativas do egrep GNU para suportar o uso tradicional, assumindo que { não é especial se for o início de uma especificação de intervalo inválido. Por exemplo, o comando shell egrep ‘{1’ procura pela string de dois caracteres {1 em vez de reportar um erro de sintaxe na expressão regular. POSIX.2 permite este comportamento como uma extensão, mas scripts portáteis devem evitá-lo.
Variáveis de ambiente
O comportamento do egrep é afetado pelas seguintes variáveis de ambiente:
Um locale LC_foo é especificado examinando as três variáveis de ambiente LC_ALL, LC_foo, LANG, nesta ordem. A primeira destas variáveis que é definida especifica o locale. Por exemplo, se LC_ALL não está definida, mas LC_MESSAGES está definida para pt_BR, então o português brasileiro é usado para o locale LC_MESSAGES. O locale C é usado se nenhuma dessas variáveis de ambiente estiver definida, ou se o catálogo de locale não estiver instalado, ou se o grep não tiver sido compilado com suporte ao idioma nacional (NLS).
GREP_OPTIONS
Esta variável especifica opções padrão a serem colocadas na frente de qualquer opção explícita. Por exemplo, se GREP_OPTIONS é ‘–binary-files=without-match –directories=skip’, o grep comporta-se como se as duas opções –binary-files=without-match e –directories=skip tivessem sido especificadas antes de qualquer opção explícita. As especificações das opções são separadas por espaço em branco. Uma barra invertida escapa do próximo caractere, então pode ser usada para especificar uma opção contendo espaço em branco ou uma barra invertida.
GREP_COLOR
Especifica o marcador para destaque.
LC_ALL, LC_COLLATE, LANG
Estas variáveis especificam o locale LC_COLLATE, que determina a sequência de agrupamento usada para interpretar expressões de intervalo como .
LC_ALL, LC_CTYPE, LANG
Estas variáveis especificam o locale LC_CTYPE, que determina o tipo de caracteres, por exemplo quais caracteres são espaços em branco.
LC_ALL, LC_MESSAGES, LANG
Estas variáveis especificam o locale LC_MESSAGES, que determina o idioma que o grep usa para as mensagens. O locale C padrão usa mensagens em inglês americano.
POSIXLY_CORRRECT
Se definido, o grep se comporta como o POSIX.2 requer; caso contrário, o grep se comporta mais como outros programas GNU. POSIX.2 requer que as opções que seguem nomes de arquivos devem ser tratadas como nomes de arquivos; por padrão, tais opções são permutadas para a frente da lista de operandos e são tratadas como opções. Além disso, o POSIX.2 requer que as opções não reconhecidas sejam diagnosticadas como “ilegais”, mas como elas não são realmente contra a lei, o padrão é diagnosticá-las como “inválidas”. POSIXLY_CORRECT também desabilita _N_GNU_nonoption_argv_flags_, descrito abaixo.
_N_GNU_nonoption_argv_flags_
(Aqui N é o ID do processo numérico do grep.) Se o ith caractere do valor desta variável de ambiente for 1, não considere o ith operando do grep como uma opção, mesmo que pareça ser uma. Uma shell pode colocar esta variável no ambiente para cada comando que executa, especificando quais operandos são os resultados da expansão do nome do arquivo wildcard e portanto não devem ser tratados como opções. Este comportamento está disponível apenas com a biblioteca C GNU, e apenas quando POSIXLY_CORRECT não está definido.
Exemplos
egrep "support|help|windows" myfile.txt
Procurar por padrões de ajuda de suporte e janelas no ficheiro myfile.txt.
egrep '^+$' myfile.txt
Match quaisquer linhas no ficheiro myfile.txt que iniciam uma linha com uma palavra alfabética que também termina a linha.
egrep -c '^begin|end$' myfile.txt
Conta o número de linhas em myfile.txt que começam com a palavra ‘begin’ ou terminam com a palavra ‘end’.
fgrep – Filtrar texto que corresponde a uma string de caracteres fixos.
grep – Filtrar texto que corresponde a uma expressão regular.
sed – Um utilitário para filtrar e transformar texto.
sh – O interpretador de comandos Bourne shell.