Trabalhando com coringas, filtros e expressões regulares no shell

Nesse artigo mostrarei o uso de coringas, filtros e expressões regulares. Nele serão abordados tópicos como o uso de comandos trabalhando com coringas, os comandos cut, grep, head, tail, sort, tr, wc, nl, uniq e paste, que trabalham como filtro de dados e o uso de expressões regulares utilizando os comandos sed e grep.

[ Hits: 146.467 ]

Por: Cristian Alexandre Castaldi em 21/08/2004


Coringas



Coringas básicos


Usaremos dois tipos de coringas básicos nesse tópico:
  • * - Atua como um substituto para qualquer número e seqüência de caracteres.
  • ? - Atua como substituto para qualquer caractere único.

Vamos iniciar listando todos os arquivos do diretório /var/log terminado com .log:

$ ls -l *.log
-rw-r--r--    1 root     root        27488 Jun 21 12:03 XFree86.0.log
-rw-r-----    1 root     adm         58686 Jun 21 15:38 auth.log
-rw-r--r--    1 root     root       406275 Jun 21 12:02 daemon.log
-rw-r--r--    1 root     root       431602 May 31 10:21 installer.log
-rw-r--r--    1 root     root       226954 Jun 21 12:02 kdm.log
-rw-r--r--    1 root     root       249322 Jun 21 12:01 kern.log
-rw-r--r--    1 root     root          902 Jun 21 12:01 lpr.log
-rw-r--r--    1 root     root            0 May 31 09:12 mail.log
-rw-r--r--    1 postgres postgres        0 Jun 21 12:01 postgres.log
-rw-r--r--    1 root     root        52400 May 31 10:19 scrollkeeper.log
-rw-r--r--    1 root     root         3040 Jun 21 12:02 user.log
-rw-r--r--    1 root     root            0 May 31 09:12 uucp.log
Agora vamos listar apenas os arquivos que se iniciam com a letra u:

$ ls u*
user.log uucp.log

Agora no meu diretório eu quero listar somente os arquivos arq terminados com três caracteres:

$ ls -l arq.???
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.001
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.jpg
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.tmp
Podemos também usar os dois coringas juntos, observe:

$ ls -l arq*.???
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.001
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.jpg
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.tmp
-rw-r--r--    1 root     root            0 Jun 21 15:51 arq1.txt
-rw-r--r--    1 root     root            0 Jun 21 15:51 arq2.bmp
-rw-r--r--    1 root     root            0 Jun 21 15:51 arq3.xml
$ ls -l a??.*
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.001
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.jpg
-rw-r--r--    1 root     root            0 Jun 21 15:55 arq.tmp


Coringas avançados


Nesse tópico abordaremos o uso de coringas mais avançados, usaremos coringas para especificar uma faixa de caracteres para efetuar uma combinação de resultados.

Imagine que necessitamos saber quais são os arquivos .conf, do diretório /etc, que iniciem com a letra a até a letra d, para essa tarefa usaremos os coringas para especificar uma faixa a ser listada entre um par de colchetes, observe:

$ ls -l [a-d]*.conf
-rw-r--r--    1 root     root         2091 May 31 08:27 adduser.conf
-rw-r--r--    1 root     root         4109 Jun 10  2002 analog.conf
-rw-r--r--    1 root     root         3956 Oct  1  2001 checksecurity.conf
-rw-r--r--    1 root     root           48 May 31 10:08 cvs-cron.conf
-rw-r--r--    1 root     root           31 May 31 10:08 cvs-pserver.conf
-rw-r--r--    1 root     root         2290 Mar 28  2002 debconf.conf
-rw-r--r--    1 root     root          336 Mar 24  2002 deluser.conf
-rw-r--r--    1 root     root         1518 Mar 16  2002 dhclient.conf
Agora imagine que necessitamos apenas dos arquivos iniciados com as letras a e d:

$ ls -l [ad]*.conf
-rw-r--r--    1 root     root         2091 May 31 08:27 adduser.conf
-rw-r--r--    1 root     root         4109 Jun 10  2002 analog.conf
-rw-r--r--    1 root     root         2290 Mar 28  2002 debconf.conf
-rw-r--r--    1 root     root          336 Mar 24  2002 deluser.conf
-rw-r--r--    1 root     root         1518 Mar 16  2002 dhclient.conf
Podemos utilizar os coringas com vários comandos otimizando diversas tarefas do dia a dia, por exemplo:

Suponha que precisamos fazer uma cópia de todos os arquivos mp3 para outro diretório.

$ cp -rf /tmp/*.mp3 /home/crildo/music/

Para facilitar o entendimento, explicarei o significado de cada coringa:
  • * - Significa tudo ou todos caracteres:

    $ rm -i *.jpg

  • ? - Significa um único caractere:

    $ ls -l ?inux.kwd

  • [caracteres] - Significa todos os caracteres que estiverem dentro dos colchetes:

    $ ls -l [cju]

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Coringas
   3. Filtros
   4. Expressões regulares
   5. Bibliografia
Outros artigos deste autor

Servidor CVS: Instalando, configurando e gerenciando no Linux

Gerenciando quotas de disco

Trabalhando com shell e variáveis de ambiente

Sistema de boot, níveis de execução e shutdown

Instalando e configurando o servidor Samba

Leitura recomendada

Freeduc - Educação escolar é com Linux!

Atualização do ZappWM 4.0 Beta (Window Manager)

O Sistema Debian Alternatives

Shell Script Para Iniciantes - Parte I

Instalando e arredondando o Slackware 13.1

  
Comentários
[1] Comentário enviado por daaugusto em 21/08/2004 - 15:04h

O certo seria "curinga" (do jogo de cartas) e não "coringa".

[2] Comentário enviado por pop_lamen em 21/08/2004 - 15:30h

Cara seguinte...
tenho um saida mais ou menos assim...:
blah blah blah [blah blah] (blah blah)
e quero separar somente o que esta dentro dos colchetes...
como faco!?

[3] Comentário enviado por fabio em 21/08/2004 - 20:15h

Vixe.. Pessoal, o autor colocou curinga no artigo inteiro, eu que em minha santa ignorância mudei tudo para coringa. Assim que voltar de viagem (Domingo) mudo isso.

[]'s

[4] Comentário enviado por fabio em 21/08/2004 - 20:19h

Aproveitando o embalo, veja se isso funciona:

echo 'blah blah blah [esse blah blah aqui] (blah blah)' | sed 's/^.*\[\(.*\)\].*$/\1/'

[]'s

[5] Comentário enviado por removido em 22/08/2004 - 13:56h

kra muito bom artigo....parabéns!

valeu

[6] Comentário enviado por pop_lamen em 22/08/2004 - 18:34h

Cara funcionar funcionou
soh q eu ainda nao peguei as manhas desse SED

[7] Comentário enviado por crildo em 23/08/2004 - 09:05h

Leia a man page do comando ou consulte o arquivo pdf LPI Linux Certification In a Nutshell. Galera obrigado pelos comentários e críticas, até mais...

[8] Comentário enviado por wronieri em 23/08/2004 - 14:24h

crildo muito bom seu artigo parabéns :-)

[9] Comentário enviado por flipe em 23/08/2004 - 17:22h

no grep seria bom a opção -e

[10] Comentário enviado por agk em 25/08/2004 - 09:54h

Excelente artigo, continue assim amigo, gostei muito. Já estava fazendo algumas coisas em Shell faz algum tempo, mas com esse artigo vejo que as possibilidades são muitas, alias tenho uma dúvida, o que não dá pra fazer em shell? ehehe...

[11] Comentário enviado por shadowm00n em 30/10/2006 - 16:56h

no trecho abaixo, como eu faria para passar variáveis como parametro, exemplo: ao inves de passar .../a/%/... eu quero passar .../$var1/$var2/...

$ sed -e '1,3s/a/%/g' nomes.txt
Am%r%l
Suz%n
M%ri%n%
Wilson
Yan

[12] Comentário enviado por leodamasceno em 13/10/2009 - 08:49h

Cara, parabéns!
Ótimo artigo. Estou estudando pra LPI, e nessa questão dos "coringas" você fez uma ótima explicação.
Mais uma vez, parabéns.

[13] Comentário enviado por rnduart em 22/04/2011 - 14:06h

Difícil para que esta começando como eu. Mas vou estudar o artigo mais vez para aprender.

[14] Comentário enviado por esaraujo em 08/05/2013 - 09:37h

Artigo muito bom.
Obrigado.

[15] Comentário enviado por pmargreff em 20/05/2015 - 23:27h


Mais de dez anos se passaram da data de escrita e este artigo continua sendo relevante, parabéns, muito no mesmo.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts