• Nenhum resultado encontrado

Busca em arquivos texto com expressões regulares

No documento LinuxSystemAdministration COMPLETA (páginas 72-77)

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ÓRIO

Esse 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/passwd

3) Trazer os usuário que possuem o bash como shell padrão.

grep 'bash$' /etc/passwd

4) 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/passwd

7) 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/passwd

9) Trocar a palavra bash por sh em todo o arquivo.

sed 's/bash/sh/g' /etc/passwd

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.

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.

No documento LinuxSystemAdministration COMPLETA (páginas 72-77)

Documentos relacionados