<Anterior | Conteúdo | Próxima>
grep
O programa principal que usaremos para trabalhar com expressões regulares é nosso velho amigo, grep. O nome "grep" é, na verdade, derivado da frase "impressão de expressão regular global", então podemos ver que grep tem algo a ver com expressões regulares. Em essência, grep pesquisa arquivos de texto para o texto de ocorrência que corresponde a uma expressão regular especificada e produz qualquer linha que contenha uma correspondência com a saída padrão.
Até agora, temos usado grep com strings fixas, assim:
[me @ linuxbox ~] $ ls / usr / bin | grep zip
[me @ linuxbox ~] $ ls / usr / bin | grep zip
Isso irá listar todos os arquivos no / usr / bin diretório cujos nomes contêm a substring “zip”.
O grep o programa aceita opções e argumentos desta forma:
grep [opções] regex [Arquivo...]
onde regex é uma expressão regular.
Aqui está uma lista dos comumente usados grep opções:
Tabela 19-1: Opções de grep
Descrição da Opção
Descrição da Opção
-i Ignorar caso. Não faça distinção entre caracteres maiúsculos e minúsculos. Também pode ser especificado --ignorar caso.
-v Inverter correspondência. Normalmente, grep imprime linhas que contêm uma correspondência.
Esta opção causa grep para imprimir cada linha que não contém uma correspondência. Também pode ser especificado --invert-match.
-c Imprime o número de correspondências (ou não correspondências se o -v opção também é especificada) em vez das próprias linhas. Também pode ser especificado --contar.
-l Imprima o nome de cada arquivo que contém uma correspondência em vez das próprias linhas. Também pode ser especificado --arquivos com correspondências.
-L Como a opção -l, mas imprime apenas os nomes dos arquivos que não contêm correspondências. Também pode ser especificado --files-without- match.
-n Prefixe cada linha correspondente com o número da linha dentro do arquivo. Também pode ser especificado --line-number.
-h Para pesquisas de vários arquivos, suprima a saída de nomes de arquivos. Também pode ser especificado --no-nome do arquivo.
A fim de explorar mais completamente grep, vamos criar alguns arquivos de texto para pesquisar:
grep
[me @ linuxbox ~] $ ls / bin> dirlist-bin.txt [me @ linuxbox ~] $ ls / usr / bin> dirlist-usr-bin.txt [me @ linuxbox ~] $ ls / sbin> dirlist-sbin.txt [me @ linuxbox ~] $ ls / usr / sbin> dirlist-usr-sbin.txt [me @ linuxbox ~] $ ls dirlist * .txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
[me @ linuxbox ~] $ ls / bin> dirlist-bin.txt [me @ linuxbox ~] $ ls / usr / bin> dirlist-usr-bin.txt [me @ linuxbox ~] $ ls / sbin> dirlist-sbin.txt [me @ linuxbox ~] $ ls / usr / sbin> dirlist-usr-sbin.txt [me @ linuxbox ~] $ ls dirlist * .txt
dirlist-bin.txt dirlist-sbin.txt dirlist-usr-sbin.txt dirlist-usr-bin.txt
Podemos realizar uma pesquisa simples em nossa lista de arquivos, como esta:
[me @ linuxbox ~] $ grep bzip dirlist * .txt
dirlist-bin.txt: bzip2 dirlist-bin.txt: bzip2recover
[me @ linuxbox ~] $ grep bzip dirlist * .txt
dirlist-bin.txt: bzip2 dirlist-bin.txt: bzip2recover
Neste exemplo, grep pesquisa todos os arquivos listados para a string bzip e encontra duas correspondências, ambas no arquivo listadir-bin.txt. Se estivéssemos interessados apenas na lista de arquivos que continham correspondências, e não nas próprias correspondências, poderíamos especificar o -l opção:
[me @ linuxbox ~] $ grep -l bzip dirlist * .txt
listadir-bin.txt
[me @ linuxbox ~] $ grep -l bzip dirlist * .txt
listadir-bin.txt
Por outro lado, se quiséssemos apenas ver uma lista dos arquivos que não continham uma correspondência, poderíamos fazer isso:
[me @ linuxbox ~] $ grep -L bzip dirlist * .txt
lista de diretórios-sbin.txt lista de diretórios-usr-bin.txt lista de diretórios-usr-sbin.txt
[me @ linuxbox ~] $ grep -L bzip dirlist * .txt
lista de diretórios-sbin.txt lista de diretórios-usr-bin.txt lista de diretórios-usr-sbin.txt