Comando Linux egrep
Nos sistemas operacionais do tipo Unix, o comando egrep procura um padrão de texto, usando expressões regulares estendidas para executar a correspondência. Executar o egrep é equivalente a executar o grep com a opção -E .
Este documento cobre a versão GNU / Linux do egrep .
Sintaxe
egrep [ opções ] PADRÃO [ ARQUIVO ...]
Opções
-A NUM , –after-context = NUM | Imprima NUM linhas do contexto à direita após as linhas correspondentes. Coloca uma linha contendo – entre grupos contíguos de correspondências. |
-a , –text | Processe um arquivo binário como se fosse texto; isso é equivalente à opção –binary-files = text . |
-B NUM , –before-context = NUM | Imprima NUM linhas do contexto inicial antes de combinar as linhas. Coloca uma linha contendo – entre grupos contíguos de correspondências. |
-C NUM , –context = NUM | Imprima NUM linhas de contexto de saída. Coloca uma linha contendo – entre grupos contíguos de correspondências. |
-b , – desvio de bytes | Imprima o deslocamento de bytes 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, suponha que o arquivo seja do tipo TYPE . Por padrão, TYPE é binário e o grep normalmente gera 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; isso é equivalente à opção -I . Se TYPE for texto, o grep processa um arquivo binário como se fosse texto; isso é equivalente à opção -a . Aviso: grep –binary-files = text pode gerar lixo binário, o que pode ter efeitos colaterais desagradáveis se a saída for um terminal e se o driver do terminal interpretar alguns deles como comandos. |
–colour [ = WHEN ], –color [ = WHEN ] | Coloque a sequência correspondente com o marcador localizado na variável de ambiente GREP_COLOR . QUANDO pode ser ‘ nunca ‘, ‘ sempre ‘ ou ‘ automático ‘ |
-c , –count | Suprimir 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 AÇÃO , – dispositivos = AÇÃO | Se um arquivo de entrada for um dispositivo, FIFO ou soquete, 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 ignorado, os dispositivos serão ignorados silenciosamente. |
-d AÇÃO , –diretórios = AÇÃO | Se um arquivo de entrada for um diretório , use ACTION para processá-lo. Por padrão, ACTION é lido, o que significa que os diretórios são lidos como se fossem arquivos comuns. Se ACTION for ignorado, os diretórios serão ignorados silenciosamente. Se ACTION for recursiva , o grep lê todos os arquivos em cada diretório, recursivamenteS ; isso é equivalente à opção -r . |
-e PATTERN , –regexp = PATTERN | Use PATTERN como padrão; útil para proteger padrões começando com ” – “. |
-F , – strings fixas | Interprete PATTERN como uma lista de cadeias fixas, separadas por novas linhas , que podem corresponder. |
-P , –perl-regexp | Interprete PATTERN como uma expressão regular do Perl . |
-f ARQUIVO , – ARQUIVO = ARQUIVO | Obtenha padrões de 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 regular básica (veja abaixo). Esse é o padrão. |
-H , –com o nome do arquivo | Imprima o nome do arquivo para cada correspondência. |
-h , –no-filename | Suprima a prefixação dos nomes de arquivos na saída quando vários arquivos forem pesquisados. |
–Socorro | Envie uma breve mensagem de ajuda. |
-EU | Processe um arquivo binário como se não contivesse dados correspondentes; isso é equivalente à opção –binary-files = without-match . |
-i , –ignore-case | Ignore as distinções entre maiúsculas e minúsculas nos arquivos PATTERN e de entrada. |
-L , – arquivos sem correspondência | Suprimir saída normal; em vez disso, imprima o nome de cada arquivo de entrada do qual normalmente nenhuma saída seria impressa. A digitalização será interrompida na primeira partida. |
-l , –arquivos com correspondências | Suprimir saída normal; em vez disso, imprima o nome de cada arquivo de entrada do qual a saída normalmente seria impressa. A digitalização será interrompida na primeira partida. |
-m NUM , –max-count = NUM | Pare de ler um arquivo após NUM linhas correspondentes. Se a entrada for uma entrada padrão de um arquivo regular e NUM linhas correspondentes forem exibidas, o grep garantirá que a entrada padrão seja posicionada logo após a última linha correspondente antes de sair, independentemente da presença de linhas de contexto à direita. Isso permite que um processo de chamada retome uma pesquisa. Quando o grep para após NUM linhas correspondentes, ele gera qualquer linha de contexto à direita. Quando a opção -c ou –count também é usada, o grep não gera uma contagem maior que NUM . Quando a opção -v ou –invert-match também é usada, o grep para após a saída de NUM linhas não correspondentes. |
–mmap | Se possível, use a chamada do sistema mmap para ler a entrada, em vez da chamada do sistema de leitura padrão. Em algumas situações, –mmap produz melhor desempenho. No entanto, –mmap pode causar um comportamento indefinido (incluindo dumps principais ) se um arquivo de entrada diminuir enquanto o grep estiver em operação ou se ocorrer um erro de E / S. |
-n , –line-number | Prefixe cada linha de saída com o número da linha em seu arquivo de entrada. |
-o , – apenas correspondência | Mostrar apenas a parte de uma linha correspondente que corresponde a PATTERN . |
–label = LABEL | Exibe a entrada realmente proveniente da entrada padrão como entrada proveniente do arquivo LABEL . Isso é especialmente útil para ferramentas como zgrep , por exemplo, gzip -cd foo.gz | grep -H –label = foo something |
–line-buffered | Use buffer de linha. Isso pode incorrer em uma penalidade de desempenho. |
-q , –quiet , –silent | Fique quieto; não escreva nada na saída padrão. Saia imediatamente com o 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 | Leia todos os arquivos em cada diretório, recursivamente; isso é equivalente à opção -d recurse . Modificado por: –include = PADRÃO Recursar em diretórios apenas pesquisando arquivos correspondentes a PATTERN . RSYNC_EXCLUDEFROM = PADRÃO Recursar em diretórios pular arquivo correspondente PATTERN . |
-s , –no-messages | Suprimir mensagens de erro sobre arquivos inexistentes ou ilegíveis. Nota sobre portabilidade: diferente do GNU grep , o grep tradicional não estava em conformidade com o POSIX .2, porque o grep tradicional não possuía a opção -q e a opção -s se comportava como a opção -q do GNU grep. Os scripts de shell destinados a serem portáveis para o grep tradicional devem evitar -q e -s e redirecionar a saída para / dev / null . |
-U , –binário | Trate os arquivos como binários. Por padrão, no MS-DOS e no MS Windows , o grep adivinha o tipo de arquivo observando o conteúdo da primeira leitura de 32 KB do arquivo. Se o grep decidir que o arquivo é um arquivo de texto , ele retira os caracteres CR do conteúdo original do arquivo (para fazer expressões regulares com ^ e $ funcionarem corretamente). A especificação de -U anula essas suposições, fazendo com que todos os arquivos sejam lidos e passados para o mecanismo de correspondência literalmente; se o arquivo for um arquivo de texto com pares CR / LF no final de cada linha, isso fará com que algumas expressões regulares falhem. Esta opção não tem efeito em plataformas diferentes do MS-DOS e MS-Windows. |
-u , –unix-byte-offsets | Relatar desvios de bytes no estilo Unix . Essa opção faz com que o grep relate desvios de bytes como se o arquivo fosse um arquivo de texto no estilo Unix, ou seja, com caracteres CR removidos. Isso produzirá 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 diferentes do MS-DOS e MS-Windows. |
-V, –version | Imprima o número da versão do grep para o erro padrão. Este número de versão deve ser incluído em todos os relatórios de erros (veja abaixo). |
-v , –invert-match | Inverta a sensação de correspondência, para selecionar linhas não correspondentes. |
-w , –word-regexp | Selecione apenas as linhas que contêm correspondências que formam palavras inteiras. O teste é que a substring correspondente deve estar no início da linha ou precedida por um caractere que não seja de palavra. Da mesma forma, ele deve estar no final da linha ou ser seguido por um caractere que não seja de palavra. Os caracteres constituintes da palavra são letras, dígitos e o sublinhado. |
-x , –line-regexp | Selecione apenas as correspondências que correspondam exatamente à linha inteira. |
-y | Sinônimo obsoleto de -i . |
-Z , –null | Emita um byte zero (o caractere ASCII NULLS ) em vez do caractere que normalmente segue um nome de arquivo. Por exemplo, grep -lZ gera um byte zero após cada nome de arquivo, em vez da nova linha usual. Essa opção torna a saída inequívoca, mesmo na presença de nomes de arquivos contendo caracteres incomuns, como novas linhas. Essa 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 nova linha. |
Expressões regulares
Uma expressão regular é um padrão que descreve um conjunto de cadeias . Expressões regulares são construídas analogamente às expressões aritméticas, usando vários operadores para combinar expressões menores.
O Grep entende duas versões diferentes da sintaxe da expressão regular: ” básico ” e ” estendido “. No GNU grep , não há diferença na funcionalidade disponível usando a sintaxe. Em outras implementações, expressões regulares básicas são menos poderosas. A descrição a seguir se aplica a expressões regulares estendidas, usadas no egrep ; as 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 correspondem a um único caractere. A maioria dos caracteres, incluindo todas as letras e dígitos , são expressões regulares que correspondem a si mesmas. Qualquer metacaractere com significado especial pode ser citado precedendo-o com uma barra invertida.
Uma expressão entre colchetes é uma lista de caracteres entre [ e ] . Corresponde a qualquer caractere único nessa lista; se o primeiro caractere da lista for o sinal de intercalação ^ , ele corresponderá a qualquer caractere que não esteja na lista. Por exemplo, a expressão regular [0123456789] corresponde a qualquer dígito único.
Dentro de uma expressão entre colchetes, uma expressão de intervalo consiste em dois caracteres separados por um hífen (“-“). Ele corresponde a qualquer caractere único que classifique entre os dois caracteres, inclusive, usando a sequência de intercalação e o conjunto de caracteres do código do idioma. Por exemplo, no código de idioma C padrão, [ad] é equivalente a [abcd] . Muitos códigos de idioma ordenam caracteres na ordem do dicionário e, nesses locais, [ad] normalmente não é equivalente a [abcd] ; pode ser equivalente a [aBbCcDd] , por exemplo. Para obter a interpretação tradicional das expressões de colchete, você pode usar o código de idioma C configurando a variável de ambiente LC_ALL para o valor C.
Por fim, certas classes de caracteres nomeadas são predefinidas nas expressões de colchetes, da seguinte maneira. Seus nomes são auto-explicativos e são [: alnum:] , [: alpha:] , [: cntrl:] , [: digit:] , [: graph:] , [: lower:] , [: print:] , [: punct:] , [: space:] , [: upper:] e [: xdigit:] . Por exemplo, [[: alnum:]] significa [0-9A-Za-z] , exceto que a última forma depende da localidade C e da codificação de caracteres ASCII, enquanto a anterior é independente da localidade e do conjunto de caracteres. (Observe que os colchetes nesses nomes de classe fazem parte dos nomes simbólicos e devem ser incluídos além dos colchetes que delimitam a lista de colchetes.) A maioria dos metacaracteres perde seu significado especial nas listas. Para incluir um literal ], coloque-o primeiro na lista. Da mesma forma, para incluir um literal, coloque-o em qualquer lugar, exceto primeiro. Finalmente, para incluir um literal – coloque-o por último.
O período . corresponde a qualquer caractere único. O símbolo \ w é sinônimo de [[: alnum:]] e \ W é sinônimo de [^ [: alnum]] .
O sinal de intercalação ^ e o sinal de dólar (” $ “) são metacaracteres que correspondem respectivamente à sequência vazia no início e no final de uma linha. Os símbolos \ < e \> correspondem, respectivamente, à sequência vazia no início e no final de uma palavra. O símbolo \ b corresponde à string vazia na borda de uma palavra e \ B corresponde à string 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 corresponde ao máximo uma vez. |
* | O item anterior corresponderá zero ou mais vezes. |
+ | O item anterior será correspondido uma ou mais vezes. |
{ n } | O item anterior é correspondido exatamente n vezes. |
{ n ,} | O item anterior corresponde a n ou mais vezes. |
{ n , m } | O item anterior é correspondido pelo menos n vezes, mas não mais que m vezes. |
Duas expressões regulares podem ser concatenadas ; a expressão regular resultante corresponde a qualquer sequência formada concatenando duas substrings que correspondem respectivamente às subexpressões concatenadas.
Duas expressões regulares podem ser unidas pelo operador infix | ; a expressão regular resultante corresponde a qualquer sequência que corresponda a qualquer subexpressão.
A repetição tem precedência sobre a concatenação, que por sua vez tem precedência sobre a alternação. Uma subexpressão inteira pode ser colocada entre parênteses para substituir essas regras de precedência.
A referência inversa \ n , em que n é um único dígito, corresponde à substring correspondida anteriormente pela nésima subexpressão entre parênteses da expressão regular.
Nas expressões regulares básicas, os metacaracteres ? , + , { , | , ( , e ) perdem seu significado especial; em vez disso, use as versões com barra invertida \? , \ + , \ { , \ | , \ ( , e \) .
O egrep tradicional não suportava o { metacaractere, e algumas implementações do egrep suportam \ { , então scripts portáteis devem evitar { nos padrões do egrep e devem usar [{] para corresponder a um literal { .
O GNU egrep tenta oferecer suporte ao uso tradicional assumindo que { não é especial se for o início de uma especificação de intervalo inválida. Por exemplo, o comando shell egrep ‘{1’ procura a cadeia de dois caracteres {1 em vez de relatar um erro de sintaxe na expressão regular. O POSIX.2 permite esse comportamento como uma extensão, mas os scripts portáteis devem evitá-lo.
variáveis ambientais
O comportamento do Grep é afetado pelas seguintes variáveis de ambiente:
Um código de idioma LC_foo é especificado examinando as três variáveis de ambiente LC_ALL , LC_foo , LANG , nessa ordem. A primeira dessas variáveis configuradas especifica o código do idioma. Por exemplo, se LC_ALL não estiver definido, mas LC_MESSAGES estiver definido como pt_BR , o português do Brasil será usado para o código de idioma LC_MESSAGES . O código de idioma C é usado se nenhuma dessas variáveis de ambiente estiver definida, ou se o catálogo de códigos de idioma não estiver instalado, ou se o grep não tiver sido compilado com NLS (National Language Support).
GREP_OPTIONS
Essa variável especifica as opções padrão a serem colocadas na frente de quaisquer opções explícitas. Por exemplo, se GREP_OPTIONS for ‘ – arquivos binários = sem correspondência – diretórios = ignorar ‘, grep se comportará como se as duas opções – arquivos binários = sem correspondência e – diretórios = ignor fossem especificadas antes de qualquer opções explícitas. As especificações das opções são separadas por espaços em branco . Uma barra invertida escapa ao próximo caractere, portanto, pode ser usada para especificar uma opção que contenha espaço em branco ou uma barra invertida.
GREP_COLOR
Especifica o marcador para realçar.
LC_ALL, LC_COLLATE, LANG
Essas variáveis especificam o código de idioma LC_COLLATE , que determina a sequência de intercalação usada para interpretar expressões de intervalo como [az] .
LC_ALL, LC_CTYPE, LANG
Essas variáveis especificam a localidade LC_CTYPE , que determina o tipo de caracteres, por exemplo, quais caracteres são em branco.
LC_ALL, LC_MESSAGES, LANG
Essas variáveis especificam o código do idioma LC_MESSAGES , que determina o idioma que o grep usa para mensagens. A localidade C padrão usa mensagens em inglês americano.
POSIXLY_CORRECT
Se definido, o grep se comporta conforme requer o POSIX.2; caso contrário, o grep se comportará mais como outros programas GNU. O POSIX.2 requer que as opções que seguem os nomes dos arquivos sejam tratadas como nomes de arquivo; por padrão, essas 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 exige que as opções não reconhecidas sejam diagnosticadas como “ilegais”, mas como elas não são realmente contrárias à lei, o padrão é diagnosticá-las como “inválidas”. POSIXLY_CORRECT também desativa _N_GNU_nonoption_argv_flags_ , descrito abaixo.
_N_GNU_nonoption_argv_flags_
(Aqui N é o ID numérico do processo do grep.) Se o i- ésimo caractere do valor dessa variável de ambiente for 1 , não considere o i- ésimo operando do grep como uma opção, mesmo que pareça ser um. Um shell pode colocar essa variável no ambiente para cada comando executado, especificando quais operandos são os resultados da expansão de curinga do nome do arquivo e, portanto, não devem ser tratados como opções. Esse comportamento está disponível apenas na biblioteca GNU C e somente quando POSIXLY_CORRECT não está definido.
Exemplos
egrep "suporte | ajuda | janelas" myfile.txt
Procure padrões de ajuda de suporte e janelas no arquivo myfile.txt .
egrep '^ [a-zA-Z] + $' myfile.txt
Faça a correspondência de quaisquer linhas no myfile.txt que iniciem uma linha com uma palavra alfabética que também termine a linha.
egrep -c '^ begin | end $' myfile.txt
Conte o número de linhas em myfile.txt que começam com a palavra ‘ begin ‘ ou terminam com a palavra ‘ end ‘.
Comandos relacionados
fgrep – Filtra o texto que corresponde a uma sequência de caracteres fixos.
grep – Filtra o texto que corresponde a uma expressão regular.
sed – Um utilitário para filtrar e transformar texto.
sh – O interpretador de comandos do Bourne shell.