Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação para Servidores Aula 25 Sumário • Pesquisando textos com grep; • Pesquisando campos com cut; • Subs>tuindo textos com sed; • Exercícios; 2 Pesquisando Textos • Um programa muito u>lizado para pesquisa de textos é o grep: – Permite tanto a busca por strings como expressões regulares; • A sintaxe do grep é: grep [opções...] padrão [arquivos...] onde padrão é uma string ou expressão regular que será u>lizada como critério da busca. – O grep exibe na tela cada linha do arquivo que casa com o padrão pesquisado. Se múl>plos arquivos são fornecidos o nome do arquivo seguido de dois pontos (“:”) precede a linha; – O status de retorno do comando é igual a 0 (sucesso) se for encontrada pelo menos uma linha que casa com o padrão. 3 Pesquisando Textos • As principais opções do grep são: -E u>liza na pesquisa expressões regulares estendidas (idem ao comando egrep); -F u>liza na pesquisa strings fixas (subs>tui o fgrep); -P u>liza na pesquisa expressões regulares avançadas no es>lo da linguagem Perl; -l exibe os arquivos que casam com o padrão ao invés de mostrar as linhas do arquivo; -q deixa de exibir os resultados da pesquisa, retornando apenas se obteve ou não sucesso na pesquisa; -v exibe as linhas que não casam com o padrão. 4 Pesquisando Textos • Algumas outras opções do grep: -i ignora diferença entre maiúsculas e minúsculas; -c exibe apenas o número de linhas que casam com o padrão; -o imprime apenas as strings que casam com o padrão (ao invés da linha inteira); -n imprime o número da linha e um símbolo “:” antes do conteúdo propriamente dito; --color altera a cor das strings que casam com o dado padrão; 5 Pesquisando Textos • Exemplos de busca no arquivo log.txt: – Listar as linhas que contém palavras que contenham o trecho “ão” ou o trecho “ões”, colorindo os trecho que casam com o padrão grep –E --color 'ão|ões' log.txt – Listar apenas as palavras escritas com todas as letras maiúsculas e o número das linhas em que ocorrem grep –Eon '\b[[:upper:]]+\b' log.txt – Listar as linhas que contém horários no formato hh:mm grep –E '\b([0-1][0-9]|2[0-3]):[0-5][0-9]\b' log.txt 6 Pesquisando Textos • Exemplo de script que procura na agenda por contatos cujo nome contenha o trecho passado como parâmetro: grep "-Ei" "$1" agenda.txt 2> /dev/null if [ $? -ne 0 ]; then echo "Não encontrado!" fi 7 Pesquisando Textos • Exemplo de script que procura na agenda por um contato passado como parâmetro (não servem nomes que contenham o parâmetro): grep "-Ei" "\b$1\b" agenda.txt 2> /dev/null if [ $? -ne 0 ]; then echo "Não encontrado!" fi 8 Pesquisa por Campos • Um arquivo texto pode ser u>lizado como uma base de armazenamento de registros: – Cada registro corresponde a uma linha do arquivo; • Um registro normalmente é formado por um conjunto de campos separados por: espaços em branco, tabulações ou por algum outro caractere: – P.ex. o arquivo de usuários do Unix separa os campos u>lizando o caractere dois pontos “:”; • Para obter informações de um ou mais campos em um arquivo, normalmente u>lizamos o programa cut; 9 Pesquisa por Campos • A sintaxe do cut é: cut opções... [arquivo...] • Suas principais opções são: -c lista corte baseado em caracteres. A lista é separada por vírgulas (caracteres individuais) ou traços (intervalos); -f lista corte baseado em campos. A lista é separada por vírgulas (campos individuais) ou traços (intervalos); -d delim u>liza delim como delimitador de campos para a opção “-f” (o delimitador padrão é o TAB); – Exemplo: extrair os nomes de usuário e seus diretórios home do arquivo passwd: cut -d: -f 1,6 /etc/passwd 10 Pesquisa por Campos • Exemplo: extrair os nomes de usuário e seus respec>vos diretórios home do arquivo passwd (exemplo abaixo): Administrador:unused:500:513:xxx:/home/Administrador:/bin/bash Convidado:unused:501:513:eee:/home/Convidado:/bin/bash aduarte:unused:1000:513:ttt:/home/aduarte:/bin/bash cut -d: -f 1,6 /etc/passwd 11 Subs>tuição de Texto • Muitos scripts, notadamente os voltados para gerar mensagens enviadas automa>camente, baseiam-‐se em um texto padrão que será modificado de acordo com seu des>natário ou finalidade, de forma semelhante a uma “mala direta” de um editor de textos. • O programa mais u>lizado para tarefas como esta é o sed (stream editor). As sintaxes mais comuns do sed são: sed [-‐n] 'comando_de_edição' [arquivo...] sed [-‐n] -‐e 'comando_de_edição' ... [arquivo...] sed [-‐n] -‐f arquivo_script ... [arquivo...] • O sed recebe um fluxo de texto como entrada e produz o resultado na saída padrão, sem modificar os arquivos originais. O sed é um programa capaz de realizar tarefas complexas, muito além de simples subs>tuição de textos (seu uso mais comum). • As principais opções do sed são: -‐e Para indicar que serão u>lizados múl>plos comandos de edição.-‐f Ler os comandos a par>r de um arquivo. -‐n Suprimir a impressão normal das linhas modificadas. As linhas deverão ser impressas explicitamente com o comando p. 12 Subs>tuição de Texto • U>lização básica – O uso básico do sed para subs>tuição de textos é por intermédio do comando s, que procura por um texto u>lizando expressão regular e o subs>tui por outro texto. A sintaxe do comando é: s/expressão_regular/texto_subs>tuto – Para, por exemplo, listar todos os usuários do sistema, pode-‐se listar o arquivo “etc/passwd” e remover todo o texto que vem após o primeiro dois-‐pontos (“:”). Isto pode ser feito com: sed s/:.*// /etc/passwd – O comando s do sed atua somente na primeira ocorrência na linha. Para atuar em todas as ocorrências é preciso u>lizar o sufixo g no comando. Por exemplo, para trocar todas as ocorrências da palavra amendoim por castanha em receita.txt, deve-‐se u>lizar: sed s/amendoim/castanha/g receita.txt – No lugar do sufixo g também pode ser u>lizado um número, indicando que deverá ser aquela ocorrência na linha que será subs>tuída. Por exemplo, 2 indica que ira ser subs>tuída apenas a segunda ocorrência da expressão regular em cada linha. – A opção “-‐n” do sed suprime a impressão das linhas. Assim as linhas a serem impressas devem ser selecionadas explicitamente com o comando p. O comando abaixo mostra somente as linhas que possuam a string “root” no arquivo “/etc/passwd”. sed -‐n /root/p /etc/passwd 13 Subs>tuição de Texto • Procurando em linhas específicas – É possível restringir as linhas que o sed irá atuar prefixando o comando com um endereço. As formas de se endereçar linhas são: – expressões regulares Colocando uma expressão regular antes de um comando ele irá atuar somente sobre as linhas que casarem com o padrão. – úl>ma linha Colocando o símbolo $ antes do comando estará limitando a execução do comando à ul>ma linha fornecida. O $ deve ser protegido por uma contrabarra (“\”) ou por aspas simples. – números de linha Coloca-‐se o número da linha antes do comando. – faixas Pode-‐se especificar uma faixa de linhas separando os endereços por vírgula. – expressões regulares negadas Acrescentando um caractere ! após uma expressão regular serão selecionadas as linhas que não casarem com a expressão regular. O ! deve ser protegido por uma contrabarra (“\”) ou por aspas simples. – Segue abaixo exemplo de um script que recebe um valor n e um nome de arquivo como parâmetros e mostra as n primeiras linhas do arquivo. contagem=$1 sed -‐n 1,${contagem}p "$2" 14 Exercícios • Escrever scripts para as seguintes tarefas: 1. Listar os nomes dos arquivos do diretório D (passado por parâmetro) que contém a palavra P (também passada por parâmetro), independente de conter letras maiúsculas ou minúsculas (DICA: ls -1 para listar apenas um arquivo por linha). Se nenhum arquivo for encontrado, exibir uma msg; 2. Receber um nome (ou um trecho) como parâmetro e imprimir na tela os nomes e os telefones (sem o endereço) das pessoas que estejam presente no arquivo agenda.txt e cujos nomes se casem com o padrão (considere o arquivo no formato abaixo com o TAB como separador): Ana Beatriz Rua Xxx 2102-2034 Jair AV Zzzddd 3240-2034 Marcio Rua Yyy 2222-1111 Sueli Rua Abc 3333-2121 15 Exercícios • Escrever scripts para as seguintes tarefas (con>nuação): 3. Receber como parâmetro o nome de um arquivo e exibir na tela o seu tamanho em bytes (DICA: use os comandos ls e cut); 4. Modificar o script do exercício 2 para listar somente as pessoas cujos nomes se casam com o padrão (dependendo da solução adotada, o script listaria também as pessoas cujos endereços se casam com o padrão); 16
Compartilhar