Uma expressão regular (regex) fornece uma maneira enxuta e
flexível de identificar determinadas combinações de caracteres,
como caracteres particulares, palavras ou padrões de caracteres. São
escritas numa linguagem formal que pode ser interpretada por um processador de
expressão regular, um programa (comando) que examina o texto identificando partes
que casem com algum padrão dado.
Expressões Regulares: Caracteres Especiais Caractere Descrição
^ Início de linha. $ Final de linha. . Qualquer caractere.
* Qualquer sequencia de zero ou mais caracteres. ? Nenhum ou um único caractere.
[] Qualquer caractere presente dentro dos colchetes.
GREP – Procura por determinados padrões de texto (regex) dentro de um arquivo.
Pode receber sua entrada através da entrada padrão (stdin).
Sintaxe: grep [opcao] padrao_regex arquivo_texto
EGREP – Procura por determinados padrões (eregex - expressões regulares
estendidas) de texto dentro de um arquivo. Pode receber sua entrada através da
entrada padrão (stdin).
É igual ao comando grep -E.
Sintaxe: egrep [opcao] padrao_eregex arquivo_texto
carro1.modelo= "fusca"; carro1.cor = "prata";
Figura 2.4 – Layout Memória após inicialização
//criando novo alias
Carro carro2 = carro1;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver).
Os valores das variáveis em um objeto constituem
o seu estado. Dois objetos distintos têm
o mesmo estado se suas variáveis membro têm os
mesmos valores.
ignorando os padrões regex, mesmo que se forneça caracteres especiais eles não
serão tratados como tal. Pode receber sua entrada através da entrada padrão (stdin).
É igual ao comando grep -F.
Sintaxe: fgrep [opcao] padrao_nao_regex arquivo_texto
D I C A
As expressões regulares são importantes no cotidiano do administrador de sistemas e também nos exames da certificação LPIC. Dominá-las é um requisito importante para o sucesso no exame.
Exemplos
Comando Descrição
grep -in 'go' cidades.txt Procura por ocorrências do padrão go no arquivo cidades.txt, ignora se as ocorrências são maiúsculas ou minúsculas e numera cada linha encontrada. grep -c 'tux' ~/teste Retorna a quantidade de linhas onde o padrão tux foi encontrado noarquivo ~/teste. cat paises.txt | grep -v 'brasil' Recebe sua entrada do comando cat paises.txt e retorna todas as
ocorrências onde o padrão brasil não for encontrado. fgrep 'brasil' paises_cidades.txt
Busca por ocorrências exclusivas do padrão brasil no arquivo paises_cidades.txt.
Dessa forma só serão retornadas as ocorrências onde o padrão brasil for encontrado não servindo brasileiro ou brasiliense.
SED – Procura e substitui padrões de texto (regex) dentro de um arquivo. Pode
receber sua entrada através da entrada padrão (stdin).
Sintaxe: sed [opcoes] 'comando padrao_regex' [arquivo_texto]
Exemplos
Comando Descrição
sed '/^#/d' /etc/inittab Elimina (comando d) as linhas de comentários do arquivo /etc/inittab.Na verdade essas linhas são as que se iniciam (^) com #. sed 's/tty/ttyS/g' /etc/inittab Substitui (s) as linhas onde são encontradas o padrão tty pelo padrãottyS em todo (g) o arquivo /etc/inittab. sed -e '1i Início do arquivo' \
> -e '3d' /etc/inittab Insere o texto “Início do arquivo” antes da primeira linha (1i) e apaga(d) a linha 3 do arquivo /etc/inittab. sed -f arq-cmd /etc/inittab Executa o sed no arquivo texto.txt lendo as expressões regulares e os
comandos a partir do arquivo arq-cmd (opção -f). Exemplo de conteúdo de arq-cmd:
Carro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";
Figura 2.4 – Layout Memória após inicialização
//criando novo alias
Carro carro2 = carro1;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver).
Os valores das variáveis em um objeto constituem
o seu estado. Dois objetos distintos têm
o mesmo estado se suas variáveis membro têm os
mesmos valores.
2d 5d s/tty/ttyS/d
sed '/tty/w sotty.txt' /etc/inittab Grava (w) no arquivo sotty.txt todas as linhas do arquivo /etc/inittab que contenham o padrão tty.
sed -n -e '/id/p' /etc/inittab Exibe somente (-n) as linhas do arquivo /etc/inittab que contiverem opadrão id.
D I C A
O comando sed não substitui o arquivo original, a não ser que seja feito um redirecionamento ( > ) para outro arquivo (ou o próprio arquivo original). No entanto, é preciso ter muita cautela para não prejudicar o funcionamento do sistema através de algum erro.
carro1.modelo= "fusca"; carro1.cor = "prata";
Figura 2.4 – Layout Memória após inicialização
//criando novo alias
Carro carro2 = carro1;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver).
Os valores das variáveis em um objeto constituem
o seu estado. Dois objetos distintos têm
o mesmo estado se suas variáveis membro têm os
mesmos valores.
6.1. L
ABORATÓRIOEsse laboratório tem o objetivo de mostrar o funcionamento das expressões
regulares (regex) em comandos que a suportam. Vamos utilizar o arquivo /etc/passwd
como alvo da atividade.
1) Procurar pelo usuário root dentro do arquivo.
grep 'root' /etc/passwd→ Observe que a saída do comando nos trouxe duas ocorrências: do usuário root e operator, pois este último possui o /root como diretório home.
2) Para corrigir essa saída e trazer somente o termo root no início da linha.
grep '^root' /etc/passwd3) Trazer os usuário que possuem o bash como shell padrão.
grep 'bash$' /etc/passwd4) O arquivo passwd não possui linhas em branco, mas supondo que nele haja
várias linhas em branco acidentalmente colocadas. Para eliminá-las basta usar ^$
(início de linha, final de linha).
grep '^$' /etc/passwd
5) Localizar usuários em que nome comece com a letra B (maiúsculo ou
minúsculo).
grep '^[Bb]' /etc/passwd
6) Procurar usuários cujo nome comece com consoante.
grep '^[bcdfghjklmnpqrstwvxyz]' /etc/passwd7) Nomes em que a segunda letra é vogal. Usamos o ponto (caractere
individual).
grep '^.[aeiou]' /etc/passwd
8) Linhas que possuam dez caracteres de comprimento.
grep '^...$' /etc/passwd9) Trocar a palavra bash por sh em todo o arquivo.
sed 's/bash/sh/g' /etc/passwdCarro carro1 = new Carro(); carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";
Figura 2.4 – Layout Memória após inicialização
//criando novo alias
Carro carro2 = carro1;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver).
Os valores das variáveis em um objeto constituem
o seu estado. Dois objetos distintos têm
o mesmo estado se suas variáveis membro têm os
mesmos valores.
6.2. E
XERCÍCIOS• O que são expressões regulares (RegEx)?
• Explique a diferença entre expressões regulares e metacaracteres (Wildcards).
• Quais são os comandos mais comuns que utilizam expressões regulares?
• Qual a sintaxe do comando sed para substituição de uma palavra em um
arquivo texto?
carro1.modelo= "fusca"; carro1.cor = "prata";
Figura 2.4 – Layout Memória após inicialização
//criando novo alias
Carro carro2 = carro1;
Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto
2.3 Membros de Instância
Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.
2.3.1 Invocação de Métodos
Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela
chamada de um método em um objeto usando o operador binário "." (ponto),
devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver).
Os valores das variáveis em um objeto constituem
o seu estado. Dois objetos distintos têm
o mesmo estado se suas variáveis membro têm os
mesmos valores.