Buscar

Aula25 grep cut sed

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 16 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Outros materiais