fbpx Certificação Linux: Expressões Regulares no Linux [Guia Básico]

Blog

Expressões Regulares no Linux [Guia Básico]

📅 03/04/2019 ⏱ 7 min ✍️ Uira Ribeiro
Linux
Expressões Regulares no Linux [Guia Básico]

Vamos falar sério. Tirem as crianças da sala. Se você não sabe um tiquim de expressões regulares no Linux, você não sabe Linux ainda. É igual ter um Iate para andar na piscina de casa.

Uma expressão regular é um método formal de se especificar um padrão de texto a ser procurado em um ou mais arquivos.

É uma composição de caracteres com funções especiais (metacaracteres) que agrupados entre si com caracteres literais (de A a Z) e números podem formar uma sequência, uma expressão que o shell e editores de texto podem entender e buscar.

As expressões regulares são úteis para buscar ou validar textos variáveis como:

  • Número de endereço IP;
  • Endereço de e-mail;
  • Endereço de Internet (URL);
  • Dados na coluna em um texto;
  • Dados que estão entre <tags></tags> de uma linguagem, como o HTML;
  • Número de CNPJ, RG, CPF etc.;
  • Data e Horário.

Vários editores de texto e linguagens de programação oferecem suporte a expressões regulares. As ferramentas importantes que trabalham com este recurso para a prova CompTIA Linux+ são o grep e o sed.

Comando grep

Uso:

$ grep [opções] expressão-regular arquivos

O comando grep é largamente usado no dia a dia das tarefas administrativas em Linux.

Ele filtra as linhas de um determinado arquivo procurando por uma expressão regular como padrão.

O grep pode ler um ou mais arquivos que são passados como argumento ou pode receber na entrada padrão o redirecionamento da saída de outro processo.

Se o grep receber mais de um arquivo ou um wildcard como argumento para efetuar a sua busca, ele vai indicar o nome do arquivo seguido de dois pontos e a linha encontrada.

Suas opções mais frequentes são:

  • -c: Mostra somente a contagem das ocorrências nos arquivos e não as linhas onde as ocorrências foram encontradas;
  • -h: Mostra somente as linhas encontradas, sem a indicação do nome dos arquivos;
  • -i: Procura as ocorrências ignorando se as letras estão em maiúsculas ou minúsculas;
  • -v: Mostra todas as linhas do arquivo procurado menos as ocorrências encontradas. Tem o efeito inverso;
  • -n: Mostra, além do texto das linhas encontradas, o número das linhas dentro dos arquivos;
  • -B n: Mostra n linhas antes da linha encontrada;
  • -A n: Mostra n linhas depois da linha encontrada.
&list=PL6IznNGWCdD89jP8kiacplFQcJlmMmjhb&index=36

Exemplos:

$ grep uira /etc/passwd

uira:x:500:100:uira:/home/uira:/bin/bash

Procura a palavra uira no arquivo /etc/passwd.

$ grep ‘^u’ /etc/passwd

uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash

uira:x:500:100:uira:/home/uira:/bin/bash

Procura todas as linhas começadas com a letra u no arquivo /etc/passwd. O acento circunflexo simboliza o início de uma linha.

$ grep ‘false$’ /etc/passwd

mail:x:8:12:Mailer daemon:/var/spool/clientmqueue:/bin/false

wwwrun:x:30:8:WWW daemon apache:/var/lib/wwwrun:/bin/false

Procura todas as linhas terminadas com a palavra false. O símbolo $ representa o fim de uma linha.

$ grep ‘^[aeiou]’ /etc/passwd

uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash

at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash

uira:x:500:100:uira:/home/uira:/bin/bash

alias:x:501:1000::/var/qmail:/bin/false

No shell, sempre utilize ‘aspas simples’ quando você for utilizar expressões regulares.

Procura todas as linhas que começam com as vogais. A expressão regular chamada lista procura qualquer um dos caracteres dentro do colchete. Note que a lista somente procura por apenas um caractere, por maior que ela seja.

$ grep ‘^.[aeiou]’ /etc/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/bin/bash

news:x:9:13:News system:/etc/news:/bin/bash

uira:x:500:100:uira:/home/uira:/bin/bash

Procura por todas as linhas em que o primeiro caracter seja qualquer um e o segundo caracter seja uma vogal. O ponto final na expressão regular simboliza “um caractere qualquer”.

$ grep ‘[0-9][0-9][0-9][0-9]’ /etc/passwd

squid:x:31:65534:WWW-proxy squid:/var/cache/squid:/bin/false

nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash

alias:x:501:1000::/var/qmail:/bin/false

qmaild:x:502:1000::/var/qmail:/bin/false

Procura por linhas que contenham uma sequência de quatro números consecutivos.

$ cat * | grep security

Procura em todos os arquivos em um diretório a ocorrência da palavra security.

Comando egrep

Uso:

$ egrep [opções] expressão-regular arquivos

O comando egrep é muito parecido com o grep, mas ele suporta expressões regulares com os metacaracteres +,?, | e ().

Comando fgrep

Uso:

$ fgrep [opções] chave-procura arquivos

O comando fgrep também é parecido com o grep, mas ele não suporta expressões regulares, procurando somente uma chave de busca ou um texto nos arquivos. Por este motivo, é mais rápido que o grep, mas menos versátil.

Comando sed

Uso:

$ sed [opções] {script}

O comando sed é um editor de textos simples utilizado para fazer pequenas transformações no conteúdo dos arquivos.

&list=PL6IznNGWCdD89jP8kiacplFQcJlmMmjhb&index=90

O sed recebe um texto de um ou mais arquivos passados como argumento na linha de comando e o transforma enviando a modificação para a saída padrão (monitor de vídeo).

Se quisermos que o sed realmente altere o conteúdo do arquivo é necessário utilizarmos o redirecionador maior-que “>” para um outro arquivo qualquer e depois copiarmos. A opção “-i extensão” também possibilita editar diretamente o arquivo e salvando uma cópia de segurança com a extensão indicada.

$ sed ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt > textonovo.txt

Você pode optar por utilizar o –i, de forma que o sed irá alterar o texto.txt e manter um backup em texto.txtold:

$ sed –i old ‘s/\/usr\/local\/bin/\/usr\/bin/’ texto.txt

Troca a sequência /usr/local/bin por /usr/bin no arquivo texto.txt. Observe que as contra-barras (\) dizem para o interpretador de expressões regulares que o caractere logo em seguida deve ser entendido na sua forma literal e não um símbolo de expressão regular.

$ sed ‘s/uira/carla/’ /etc/passwd

Troca o nome uira pelo nome carla no arquivo /etc/passwd

Resumo das Expressões Regulares

Observe na tabela os principais símbolos que podem ser combinados para formar expressões regulares complexas:

TABELA – Expressões Regulares

Símbolo Descrição
Aspas simples são utilizadas para delimitar o texto dentro delas como caracteres literais não interpretando nenhum caractere que estiver dentro delas como metacaractere.
Aspas duplas são utilizadas para delimitar o texto dentro delas como caracteres literais exceto os sinais “$” e “\”.
\ A contrabarra é utilizada para informar que o caractere imediatamente após deve ser interpretado como literal.
^ O acento circunflexo é utilizado para indicar o início de uma linha.
$ O cifrão é utilizado para indicar o final de uma linha.
[aeiou] Uma sequência de caracteres dentro de colchetes é interpretada como todos os caracteres são válidos para a busca.
[a-z] O sinal menos indica que qualquer caractere entre a letra a e a letra z são válidos.
[^abc] Indica que qualquer caractere menos as letras a, b, c são válidos na busca.
/palavra/ Indica que a palavra procurada deverá estar separada por espaços na esquerda e na direita.
[0-9] Indica que qualquer número de zero a nove é válido para a busca.
. O ponto final indica qualquer caractere menos uma linha em branco.

Exemplos:

Para procurar as linhas iniciadas com “Nov 10”:

$ grep “^Nov 10” messages

Nov 10 01:12:55 gs123 ntpd[2241]: time reset +0.177479 s

Nov 10 01:17:17 gs123 ntpd[2241]: synchronized to LOCAL(0), stratum 10

Nov 10 01:18:49 gs123 ntpd[2241]: synchronized to 15.1.13.13, stratum 3

Para procurar as linhas terminadas com “terminating.”:

$ grep “terminating.$” messages

Jul 12 17:01:09 cloneme kernel: Kernel log daemon terminating.

Oct 28 06:29:54 cloneme kernel: Kernel log daemon terminating.

Para contar as linhas em branco no meulog.log, utilizamos o “^$”:

$ grep -c  “^$” meulog.log

meulog.log:3

Para buscar todas as ocorrências “.ola” de um arquivo:

$ grep “.ola” arquivo

Mola

Cola

Tola

Hola

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe

Uira Ribeiro

Prof. Uirá Ribeiro

Chair do Board do Linux Professional Institute

Especialista Linux com mais de 20 anos de experiência.
Autor de 5 livros e mentor de mais de 14.000 alunos certificados.
20 certificações de alto nível, incluindo LPIC-3, CKA, RHCE e AWS Solutions Architect.

WhatsApp