Comandos Linux - Comando grep - Linux Force Security - Cursos de Linux e Segurança da Informação
Comandos Linux - Comando grep
Comandos Linux – Comando grep
Comando grep do Linux
Em sistemas operacionais do tipo Unix, o comando grep processa o texto linha por linha e imprime todas as linhas que correspondem a um padrão especificado.
Este documento cobre a versão GNU / Linux do grep .
grep [ OPÇÕES ] PADRÃO [ ARQUIVO ...]
Grep, que significa "impressão de expressão regular global", é uma ferramenta poderosa para comparar uma expressão regular com texto em um arquivo, vários arquivos ou um fluxo de entrada. Ele procura o PADRÃO do texto que você especifica na linha de comando e gera os resultados para você.
Digamos que você queira localizar rapidamente a frase " nossos produtos " em arquivos HTML em sua máquina. Vamos começar pesquisando um único arquivo. Aqui, nosso PADRÃO é "nossos produtos" e nosso ARQUIVO é listagem de produtos.html .
Foi encontrada uma única linha contendo nosso padrão, e o grep gera toda a linha correspondente ao terminal. A linha é maior que a largura do terminal e, portanto, o texto se agrupa nas seguintes linhas, mas essa saída corresponde exatamente a uma linha em nosso ARQUIVO .
Nota: O PATTERN é interpretado pelo grep como uma expressão regular. No exemplo acima, todos os caracteres que usamos (letras e um espaço) são interpretados literalmente em expressões regulares, portanto, apenas a frase exata será correspondida. Outros caracteres têm significados especiais, no entanto – alguns sinais de pontuação, por exemplo. Para obter mais informações, consulte nossa Referência rápida para expressões regulares .
Visualizando a saída grep em cores
Se usarmos a opção –color , nossas correspondências bem-sucedidas serão destacadas para nós:
Visualizando números de linha de correspondências bem-sucedidas
Será ainda mais útil se soubermos onde a linha correspondente aparece em nosso arquivo. Se especificarmos a opção -n , o grep prefixará cada linha correspondente com o número da linha:
Nossa linha correspondente é prefixada com " 18: ", que nos diz que isso corresponde à linha 18 em nosso arquivo.
Executando pesquisas grep que não diferenciam maiúsculas de minúsculas
E se "nossos produtos" aparecer no início de uma frase ou aparecer em maiúsculas? Podemos especificar a opção -i para executar uma correspondência que não diferencia maiúsculas de minúsculas :
Usando a opção -i , o grep também encontra uma correspondência na linha 23.
Pesquisando vários arquivos usando um curinga
Se tivermos vários arquivos para pesquisar, podemos pesquisá-los usando um curinga em nosso nome de ARQUIVO . Em vez de especificar product-list.html , podemos usar um asterisco (" * ") e a extensão .html . Quando o comando é executado, o shell expande o asterisco para o nome de qualquer arquivo encontrado (dentro do diretório atual) que termina em " .html ".
Observe que cada linha começa com o arquivo específico em que essa correspondência ocorre.
Pesquisando recursivamente subdiretórios
Podemos estender nossa pesquisa para subdiretórios e quaisquer arquivos que eles contenham usando a opção -r , que informa ao grep para executar sua pesquisa recursivamente . Vamos mudar nosso nome de arquivo para apenas um asterisco (" * "), para que ele corresponda a qualquer nome de arquivo ou diretório, e não apenas a arquivos HTML:
Isso nos dá três correspondências adicionais. Observe que o nome do diretório está incluído nos arquivos correspondentes que não estão no diretório atual.
Usando expressões regulares para realizar pesquisas mais poderosas
O verdadeiro poder do grep é que ele pode ser usado para corresponder a expressões regulares. (Isso é o que o "re" em "grep" significa). Expressões regulares usam caracteres especiais na cadeia PATTERN para corresponder a uma matriz mais ampla de cadeias. Vejamos um exemplo simples.
Digamos que você queira encontrar toda ocorrência de uma frase semelhante a "nossos produtos" em seus arquivos HTML, mas a frase deve sempre começar com "nossos" e terminar com "produtos". Em vez disso, podemos especificar esse PADRÃO : "nossos produtos. *" .
Em expressões regulares, o ponto (" . ") É interpretado como um curinga de caractere único. Significa "qualquer caractere que apareça neste local corresponderá". O asterisco (" * ") significa "o caractere anterior, aparecendo zero ou mais vezes, será correspondente". Portanto, a combinação " . * " Corresponderá a qualquer número de qualquer caractere. Por exemplo, " nossos produtos incríveis ", " nossos, os melhores produtos de sempre " e até " nossos produtos " serão compatíveis. E porque estamos especificando a opção -i , " NOSSOS PRODUTOS " e " OuRpRoDuCtS também corresponderão. Vamos executar o comando com esta expressão regular e ver quais correspondências adicionais podemos obter:
Aqui também obtivemos uma correspondência da frase " nossos produtos finos ".
O Grep é uma ferramenta poderosa que pode ajudá-lo a trabalhar com arquivos de texto e fica ainda mais poderosa quando você se sente confortável usando expressões regulares.
grep pesquisa os arquivos de entrada nomeados s (ou entrada padrão se nenhum arquivo for nomeado ou se um único traço (" – ") for fornecido como o nome do arquivo)) em busca de linhas contendo uma correspondência com o PATTERN fornecido. Por padrão, grep imprime as linhas correspondentes.
Além disso, três programas variantes egrep , fgrep e rgrep estão disponíveis:
O egrep é o mesmo que executar o grep -E . Nesse modo, o grep avalia sua string PATTERN como uma expressão regular estendida (ERE). Atualmente, o ERE não "estende" muito além das expressões regulares básicas, mas elas ainda podem ser muito úteis. Para obter mais informações sobre expressões regulares estendidas, consulte Expressões regulares básicas vs. estendidas , abaixo.
fgrep é o mesmo que executar grep -F . Nesse modo, o grep avalia sua string PATTERN como uma "string fixa" – todos os caracteres da sua string são tratados literalmente. Por exemplo, se sua string contiver um asterisco (" * "), o grep tentará combiná-la com um asterisco real, em vez de interpretá-lo como um curinga . Se sua string contiver várias linhas (se contiver novas linhas), cada linha será considerada uma string fixa e qualquer uma delas poderá acionar uma correspondência.
rgrep é o mesmo que executar grep -r . Nesse modo, o grep executará sua pesquisa recursivamente . Se encontrar um diretório, ele passará para esse diretório e continuará pesquisando. ( Links simbólicos são ignorados; se você deseja procurar diretórios simbolicamente vinculados, deve usar a opção -R ).
Em sistemas operacionais mais antigos, egrep , fgrep e rgrep eram programas distintos com seus próprios executáveis. Nos sistemas modernos, esses nomes de comandos especiais são atalhos para grep com os sinalizadores apropriados ativados. Eles são funcionalmente equivalentes.
–Socorro Imprima uma mensagem de ajuda resumindo brevemente as opções da linha de comando e saia.
-V , –version Imprima o número da versão do grep e saia.
Opções de seleção de correspondência
-E , –extended-regexp Interprete PATTERN como uma expressão regular estendida (consulte Expressões regulares básicas vs. estendidas ).
-F , – strings fixas Interprete PATTERN como uma lista de cadeias fixas, separadas por novas linhas , que devem ser correspondidas.
-G , –basic-regexp Interprete PATTERN como uma expressão regular básica (consulte Expressões regulares básicas vs. estendidas ). Esta é a opção padrão ao executar o grep .
-P , –perl-regexp Interprete PATTERN como uma expressão regular do Perl . Essa funcionalidade ainda é experimental e pode gerar mensagens de aviso.
Opções de controle correspondentes
-e PATTERN , –regexp = PATTERN Use PATTERN como padrão para combinar. Isso pode ser usado para especificar vários padrões de pesquisa ou para proteger um padrão começando com um traço ( – ).
-f ARQUIVO , – ARQUIVO = ARQUIVO Obtenha padrões de FILE , um por linha.
-i , –ignore-case Ignore as distinções entre maiúsculas e minúsculas nos arquivos PATTERN e de entrada.
-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. Ou, deve estar no final da linha ou seguido por um caractere que não seja de palavra. Os caracteres constituintes da palavra são letras, dígitos e sublinhados.
-x , –line-regexp Selecione apenas correspondências que correspondam exatamente à linha inteira.
-y O mesmo que -i .
-c , –count Em vez da saída normal, 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.
–color [= WHEN ], –color [= WHEN ] Coloque as seqüências correspondentes (não vazias), as linhas correspondentes, as linhas de contexto, os nomes dos arquivos, os números das linhas, os desvios de bytes e os separadores (para campos e grupos de linhas de contexto) com seqüências de escape para exibi-las em cores no terminal . As cores são definidas pela variável de ambiente GREP_COLORS. A variável de ambiente mais antiga GREP_COLOR ainda é suportada, mas sua configuração não tem prioridade. QUANDO nunca é, sempre ou automático .
-L , – arquivos sem correspondência Em vez da saída normal, 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 Em vez da saída normal, 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.
-o , – apenas correspondência Imprima apenas as partes correspondentes (não vazias) de uma linha correspondente, com cada uma dessas partes em uma linha de saída separada.
-q , –quiet , –silent 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 .
-s , –no-messages Suprimir mensagens de erro sobre arquivos inexistentes ou ilegíveis.
-b , – desvio de bytes Imprima o deslocamento de byte baseado em 0 no arquivo de entrada antes de cada linha de saída. Se -o ( –compatível apenas ) for especificado, imprima o deslocamento da própria peça correspondente.
-H , –com o nome do arquivo Imprima o nome do arquivo para cada correspondência. Esse é o padrão quando há mais de um arquivo para pesquisar.
-h , –no-filename Suprima a prefixação dos nomes dos arquivos na saída. Esse é o padrão quando há apenas um arquivo (ou apenas entrada padrão) para pesquisar.
–label = LABEL Exibe a entrada realmente proveniente da entrada padrão como entrada proveniente do arquivo LABEL . Isso é especialmente útil ao implementar ferramentas como zgrep , por exemplo, gzip -cd foo.gz | grep –label = foo -H alguma coisa . Veja também a opção -H .
-n , –line-number Prefixe cada linha de saída com o número da linha com base em 1 em seu arquivo de entrada.
-T , – guia inicial Verifique se o primeiro caractere do conteúdo real da linha está em uma parada de tabulação, para que o alinhamento das guias pareça normal. Isso é útil com opções que prefixam sua saída para o conteúdo real: -H , -n e -b . Para aumentar a probabilidade de que as linhas de um único arquivo sejam iniciadas na mesma coluna, isso também faz com que o número da linha e o deslocamento de bytes (se houver) sejam impressos em uma largura de campo de tamanho mínimo.
-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 .
-Z , –null Emita um byte zero (o caractere ASCII NUL ) 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.
-A NUM , –after-context = NUM Imprima NUM linhas do contexto à direita após as linhas correspondentes. Coloca uma linha que contém um separador de grupo ( – ) entre grupos contíguos de correspondências. Com a opção -o ou –only-matching , isso não tem efeito e um aviso é dado.
-B NUM , –before-context = NUM Imprima NUM linhas do contexto inicial antes de combinar as linhas. Coloca uma linha que contém um separador de grupo ( – ) entre grupos contíguos de correspondências. Com a opção -o ou –only-matching , isso não tem efeito e um aviso é dado.
-C NUM , – NUM , –context = NUM Imprima NUM linhas de contexto de saída. Coloca uma linha que contém um separador de grupo ( – ) entre grupos contíguos de correspondências. Com a opção -o ou –only-matching , isso não tem efeito e um aviso é dado.
Seleção de Arquivos e Diretórios
-a , –text Processe um arquivo binário como se fosse texto; isso é equivalente à opção –binary-files = text .
–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.
-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 , ou seja, lê diretórios como se fossem arquivos comuns. Se ACTION for ignorar , ignore os diretórios silenciosamente. Se ACTION for recursivo , leia todos os arquivos em cada diretório, recursivamente , seguindo os links simbólicos apenas se estiverem na linha de comando. Isso é equivalente à opção -r .
–exclude = GLOB Ignore arquivos cujo nome base corresponda ao GLOB (usando a correspondência curinga ). Um glob de nome de arquivo pode usar * ,? , e […] como curingas, e \ para citar um caractere curinga ou barra invertida literalmente.
–exclude-de = ARQUIVO Ignore arquivos cujo nome base corresponda a qualquer um dos globs de nome de arquivo lidos em FILE (usando a correspondência curinga conforme descrito em –exclude ).
–exclude-dir = DIR Exclua os diretórios correspondentes ao DIR padrão das pesquisas recursivas.
-EU Processe um arquivo binário como se não contivesse dados correspondentes; isso é equivalente à opção –binary-files = without-match .
–include = GLOB Pesquise apenas arquivos cujo nome base corresponda ao GLOB (usando a correspondência curinga, conforme descrito em –exclude ).
-r , –recursive Leia todos os arquivos em cada diretório, recursivamente, seguindo os links simbólicos apenas se estiverem na linha de comando. Isso é equivalente à opção -d recurse .
-R , –dereferência-recursiva Leia todos os arquivos em cada diretório, recursivamente. Siga todos os links simbólicos, ao contrário de -r .
–line-buffered Use buffer de linha na saída. Isso pode causar uma penalidade de desempenho.
–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.
-U , –binário Trate os arquivos como binários. Por padrão, em MS-DOS e MS-Windows, o grep adivinha o tipo de arquivo, observando o conteúdo das primeiras 32 KB lidas no 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.
-z , –null-data Trate a entrada como um conjunto de linhas, cada uma terminada por um byte zero (o caractere ASCII NUL) em vez de uma nova linha. Como a opção -Z ou –null , essa opção pode ser usada com comandos como sort -z para processar nomes de arquivos arbitrários.
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 compreende três versões diferentes da sintaxe da expressão regular: "básico" (BRE), "estendido" (ERE) e "perl" (PRCE). No GNU grep , não há diferença na funcionalidade disponível entre sintaxes básicas e estendidas. 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; as diferenças para expressões regulares básicas são resumidas posteriormente. Expressões regulares do Perl fornecem funcionalidade adicional.
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 meta-caractere com significado especial pode ser citado precedendo-o com uma barra invertida.
O ponto ( . ) Corresponde a qualquer caractere único.
Classes de caracteres e expressões de colchete
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 a classe de caracteres de números e letras no local atual. Na localidade C e na codificação do conjunto de caracteres ASCII, é o mesmo que [0-9A-Za-z] . (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 expressão entre colchetes.) A maioria dos meta-caracteres perde seu significado especial nas expressões entre colchetes. 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 sinal de intercalação ^ e o cifrão $ 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. O símbolo \ w é sinônimo de [_ [: alnum:]] e \ W é sinônimo de [^ _ [: alnum:]] .
? 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 expressões concatenadas.
Duas expressões regulares podem ser unidas pelo operador infix | ; a expressão regular resultante corresponde a qualquer sequência que corresponda à expressão alternativa.
A repetição tem precedência sobre a concatenação, que por sua vez tem precedência sobre a alternação. Uma expressão inteira pode estar entre parênteses para substituir essas regras de precedência e formar uma subexpressão.
Voltar Referências e Subexpressões
A referência posterior \ n , em que n é um único dígito, corresponde à substring correspondida anteriormente pela nésima subexpressão entre parênteses da expressão regular.
Expressões regulares básicas vs. estendidas
Nas expressões regulares básicas, os meta-caracteres ? , + , { , | , ( , e ) perdem seu significado especial; em vez disso, use as versões com barra invertida \? , \ + , \ { , \ | , \ ( , e \) .
As versões tradicionais do egrep não suportavam o { meta-caractere, e algumas implementações do egrep suportam \ { ; portanto, os scripts portáteis devem evitar { nos padrões grep -E e devem usar [{] para corresponder a um literal { .
O GNU grep -E 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 grep -E '{1' procura a cadeia de dois caracteres {1 em vez de relatar um erro de sintaxe na expressão regular. O POSIX permite esse comportamento como uma extensão, mas os scripts portáteis devem evitá-lo.
O comportamento do grep é afetado pelas seguintes variáveis ​​de ambiente.
O código do idioma da categoria LC_foo é especificado examinando as três variáveis ​​de ambiente LC_ALL , LC_foo e 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 código do idioma Português do Brasil será usado para a categoria LC_MESSAGES . O código de idioma C será usado se nenhuma dessas variáveis ​​de ambiente estiver definida, 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).
Outras variáveis ​​de observação:
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 ' –binary- files = sem correspondência –diretórios = ignorar ', grep se comportará como se as duas opções –binary-files = sem correspondência e –directories = skip tivessem sido 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 Essa variável especifica a cor usada para realçar o texto correspondente (não vazio). Foi preterido em favor de GREP_COLORS , mas ainda é suportado. Os recursos mt , ms e mc de GREP_COLORS têm prioridade sobre ele. Ele pode especificar apenas a cor usada para realçar o texto não vazio correspondente em qualquer linha correspondente (uma linha selecionada quando a opção de linha de comando -v for omitida ou uma linha de contexto quando -v for especificado). O padrão é 01; 31 , o que significa um texto em primeiro plano vermelho em negrito no plano de fundo padrão do terminal.
GREP_COLORS Especifica as cores e outros atributos usados ​​para destacar várias partes da saída. Seu valor é uma lista de recursos separados por dois pontos que assume como padrão ms = 01; 31: mc = 01; 31: sl =: cx =: fn = 35: ln = 32: bn = 32: se = 36 com o rv e omissão de recursos booleanos ( falsos ). Os recursos suportados são os seguintes:
sl = Subseqüência SGR para linhas selecionadas inteiras (ou seja, linhas correspondentes quando a opção de linha de comando -v é omitida ou linhas não correspondentes quando -v é especificado). No entanto, se o recurso booleano rv e a opção de linha de comando -v forem especificados, ela se aplicará às linhas de correspondência de contexto. O padrão está vazio (ou seja, o par de cores padrão do terminal).
cx = Substringência SGR para linhas de contexto inteiras (ou seja, linhas não correspondentes quando a opção de linha de comando -v é omitida ou linhas correspondentes quando -v é especificado). No entanto, se o recurso booleano rv e a opção da linha de comandos -v forem especificados, ela se aplicará às linhas não correspondentes selecionadas. O padrão está vazio (ou seja, o par de cores padrão do terminal).
rv Valor booleano que reverte (troca) os significados dos recursos sl = e cx = quando a opção da linha de comandos -v é especificada. O padrão é falso (ou seja, a capacidade é omitida).
mt = 01; 31 Substringência SGR para correspondência de texto não vazio em qualquer linha correspondente (ou seja, uma linha selecionada quando a opção de linha de comando -v for omitida ou uma linha de contexto quando -v for especificado). Definir isso é equivalente a definir ms = e mc = ao mesmo tempo para o mesmo valor. O padrão é um primeiro plano em texto em negrito sobre o fundo da linha atual.
ms = 01; 31 Substração SGR para correspondência de texto não vazio em uma linha selecionada. (Isso é usado apenas quando a opção de linha de comando -v é omitida.) O efeito do recurso sl = (ou cx = if rv ) permanece ativo quando isso ocorre. O padrão é um primeiro texto em negrito em vermelho sobre a linha atual fundo.
mc = 01; 31 Substração SGR para correspondência de texto não vazio em uma linha de contexto. (Isso é usado apenas quando a opção de linha de comando -v é especificada.) O efeito do recurso cx = (ou sl = if rv ) permanece ativo quando isso ocorre. O padrão é um primeiro plano em texto em negrito sobre a linha atual. fundo.
fn = 35 Substração SGR para nomes de arquivos que prefixam qualquer linha de conteúdo. O padrão é um primeiro plano de texto magenta sobre o plano de fundo padrão do terminal.
ln = 32 Substração SGR para números de linha que prefixam qualquer linha de conteúdo. O padrão é um primeiro plano de texto verde sobre o plano de fundo padrão do terminal.
bn = 32 Substração SGR para deslocamentos de bytes que prefixam qualquer linha de conteúdo. O padrão é um primeiro plano de texto verde sobre o plano de fundo padrão do terminal.
se = 36 Subseqüência SGR para separadores inseridos entre os campos de linha selecionados (:), entre os campos de linha de contexto, ( – ) e entre grupos de linhas adjacentes quando um contexto diferente de zero é especificado ( – ). O padrão é um primeiro plano de texto em ciano sobre o plano de fundo padrão do terminal.
ne Valor booleano que impede a limpeza até o final da linha usando Apagar linha ( EL ) para direita ( \ 33 [K ) cada vez que um item colorido termina. Isso é necessário em terminais nos quais o EL não é suportado. Caso contrário, é útil em terminais para os quais a capacidade terminfo booleana back_color_erase ( bce ) não se aplica, quando as cores de destaque escolhidas não afetam o plano de fundo ou quando o EL é muito lento ou causa muita oscilação. O padrão é falso (ou seja, a capacidade é omitida).
Observe que os recursos booleanos não têm parte = …. Eles são omitidos (ou seja, falsos ) por padrão e se tornam verdadeiros quando especificados.
Consulte a seção Selecionar renderização gráfica (SGR) na documentação do terminal de texto usado para valores permitidos e seu significado como atributos de caractere. Esses valores de substring são números inteiros na representação decimal e podem ser concatenados com ponto e vírgula. O grep cuida da montagem do resultado em uma sequência SGR completa ( \ 33 [ … m ). Os valores comuns a concatenar incluem 1 para negrito, 4 para sublinhado, 5 para piscar, 7 para inverso, 39 para cor de primeiro plano padrão, 30 a 37 para cores de primeiro plano, 90 a 97 para cores de primeiro plano no modo de 16 cores, 38; 5; 0 para 38; 5; 255 para modos de 88 e 256 cores, cores de primeiro plano, 49 para cor de plano de fundo padrão, 40 a 47 para cores de plano de fundo, 100 a 107 para cores de plano de fundo no modo de 16 cores e 48; 5; 0 a 48 ; 5; 255 para modos de 88 e 256 cores, cores de fundo.
LC_ALL , LC_COLLATE , LANG Essas variáveis ​​especificam o código do idioma para a categoria 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 o código do idioma para a categoria LC_CTYPE , que determina o tipo de caracteres, por exemplo, quais caracteres são espaços em branco.
LC_ALL , LC_MESSAGES , LANG Essas variáveis ​​especificam o código do idioma para a categoria 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; caso contrário, o grep se comportará mais como outros programas GNU. O POSIX 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 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 do processo numérico 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.
O status de saída é 0 se as linhas selecionadas forem encontradas e 1 se não for encontrado. Se ocorreu um erro, o status de saída é 2 .
GorjetaSe você ainda não viu nossa seção de exemplos de uso , sugerimos que você reveja essa seção primeiro.
grep chope / etc / passwd
Pesquise / etc / passwd pelo chope do usuário.
grep "31 de maio de 03" / etc / httpd / logs / error_log
Pesquise no arquivo error_log do Apache as entradas de erro que ocorreram em 31 de maio às 03:00. Ao adicionar aspas ao redor da string, isso permite que você coloque espaços na pesquisa grep.
grep -r "computerhope" / www /
Pesquise recursivamente no diretório / www / e todos os subdiretórios, por qualquer linha de qualquer arquivo que contenha a cadeia " computerhope ".
grep -w "esperança" meuarquivo.txt
Pesquise no arquivo myfile.txt as linhas que contêm a palavra " esperança ". Somente as linhas que contêm a palavra distinta "esperança" serão correspondidas. As linhas nas quais "esperança" faz parte de uma palavra não serão correspondidas.
grep -cw "esperança" meuarquivo.txt
O mesmo que o comando anterior, mas exibe uma contagem de quantas linhas foram correspondidas, em vez das linhas correspondentes.
grep -cvw "esperança" meuarquivo.txt
Inverso do comando anterior: exibe uma contagem das linhas em myfile.txt que não contêm a palavra "esperança".
grep -l "esperança" / www / *
Exiba os nomes dos arquivos (mas não as linhas correspondentes) de qualquer arquivo em / www / (mas não seus subdiretórios) cujo conteúdo inclua a sequência " esperança ".