PplWare Mobile

Sabe trabalhar com expressões regulares no Linux?

                                    
                                

Este artigo tem mais de um ano


Autor: Pedro Pinto


  1. Rocha says:

    Excelente.
    Ainda dizem que o windows é fácil.
    Mais fácil do que isto não há……ha..ha..

  2. Sergio J says:

    O artigo está bom , mas acho que o estás a castrar demasiado ao cola-lo à bash do Linux. A maior parte dos utilizadores nem sequer sabe o que é uma expressão regular. Até muitos programadores não sabem o que é, ou pelo menos como utiliza-la.
    As expressões regulares podem ser encontradas em muitos locais, sendo de facto na bash do Linux muito utilizada por power users. Pelo menos na altura do meu mestrado aqueles users mais fundamentalistas (principalmente aqueles professores mais marados) gostavam de se gabar do que conseguiam fazer com ela.

    Normalmente utilizo um pouco nas minhas aplicaçoes em C#, mas onde utilizo mais é no notepad++. Essa é umas principais razões porque uso este editor.

  3. Pedro Almeida says:

    Um programador tinha 1 problema,
    Para o resolver utilizou expressões regulares…
    O programador tem 2 problemas…. ;-P

  4. Miguel Horta says:

    Dois erros logo no primeiro paragrafo, «*são sem* dúvida *mais* poderosas.». Isto para não falar da pontuação repetida.

    Já agora poderiam referir que as expressões regulares são usadas em muitos mais sítios, e não apenas em linux…

  5. Ivan Teixeira says:

    Isto dá muito jeito para algumas coisas,
    Uma delas limpar ficheiros, ex:

    cat /etc/samba/smb.conf | egrep -v ‘^[[:space:]]*$|^[[:space:]]*[;#]’

    Explicação do comando:
    cat /etc/samba/smb.conf —> mostrar o conteúdo do ficheiro smb.conf
    egrep —> (egrep) ou (grep -e) para expressões regulares
    egrep -v–> a opção -v faz o contrario de um grep, ou seja, não escolhes o que queres ver mas sim o que não queres ver.
    egrep -v ‘^[[:space:]]*$|^[[:space:]]*[;#]’ –> vai limpar o ficheiro em que a linha contenha: espaços (linhas vazias), comecem por (;) , (#) e (espaço)

    Isto para mim é muito util 😉
    Cumprimentos a todos

    • lmx says:

      usa sempre o grep -E, o egrep está deprecated e se fizeres um cat ao mesmo, vais perceber que está lá por motivo de compatibilidade apenas com aplicações antigas 😉

      MAs boa onda 😉

      • Carlos Silva says:

        já para não falar no cat | grep ser um overuse do pipe 😉

        • lmx says:

          hehhee,
          sim neste caso é porque o ficheiro a fazer parse é pequeno 🙂

          Se fosse um ficheiro gigante ai até poderia fazer sentido, terias um processo para carregar o buffer(que não é mais que um driver do tipo productor-consumidor), e a seguir outro processo para o grep .

          Ou seja garantias uma probabilidade maior de pelo menos um dos dois estar a correr no cpu,
          gastaria mais recursos, mas acabaria de processar mais rápido.

          No caso acima não era necessario, bem visto 😉

  6. Jonas Tamagochi says:

    Sim Sei.

    Só vim responder ao titulo XD

  7. SpeedyAlmeida says:

    Associar regex ao Linux é um bocado forçado. Já utilizava isto e ainda não havia Linux.

  8. humberto costa says:

    colar expressoes regulares ao linux pode criar confusão a quem nunca ouviu falar nas mesmas.
    utilizava-as em C e em Perl, muito antes de existir o primeiro linux. a bem dizer qualquer linguagem de programaçao de jeito aceita expressoes regulares.
    expressoes regulares conseguem poupar NNN linhas de código se bem aplicadas, mas tambem sao das mais dificeis de fazer em qualquer linguagem de programacao. felizmente sei o basico para as usar diariamente em codigo que envolva texto.

  9. djx says:

    O exemplo 6 está mal. Se querem uma palavra que comece por “mys” a regex é “mys.*”

    $ echo ‘my’ > pplware
    $ grep ‘mys*’ pplware
    my

    • Andrey Oliveira says:

      Na verdade os dois exemplos estão errados:

      – Se quiser uma palavra que contenha “mys” basta usar “mys” sem nenhuma expressão regular.
      – Se quiser uma palavra que COMECE com “mys” basta usar “<mys" (em algumas shell "\<mys")
      – O exemplo do artigo tem um erro grave já que usar "mys*" vai casar qualquer palavra que contenha "my" seguido de de "s" ou não. Se no texto tivesse as palavras "mylena", "mycaela", "myui", seria incluído como coincidencias.

      • Pedro Pinto says:

        1) Sim, podes usar apenas mys ou mys* (o conter para mim é ter isso e outras coisas)
        2) resposta do primeiro
        3) O terceiro ponto não percebi

        • Andrey Oliveira says:

          “Saber se existe alguma palavra que comece por ‘mys’”

          O asterisco serve para indicar “nenhum ou vários caracteres”. Neste caso está se referindo aquele caracter que precede o sinal “*”.

          Ao usar expressão “mys*” vai retornar tudo que tenha “my”.

          Crie um texto com “mysql” “mylena”, “mycaela”, “myui” e faça o teste. Ele vai coincidir com todos e não só com mysql como sugere o exemplo.

    • Andrey Oliveira says:

      Em tempo, pra testar pode fazer da seguinte forma:

      echo “XmysqlX” |grep ‘mys.*’

      Com o seu exemplo, ele vai trazer o resultado acima como válido. O que não é para quem quer palavras que comecem com a sentença.

    • Pedro Pinto says:

      Não percebi djx, como está mal?

  10. sakura says:

    isso comeca a ser interecante quando se le codigo fonte com !@#$#@!!^^^%$%^^ mais10 linhas ninguem sabe o que aquilo faz……….
    que e poderoso ee.

  11. André Déo says:

    Para mim o melhor material de Expressões Regulares que já li, são do Aurélio Marinho Jargas (Verde), o livro dele é divertido, didático e totalmente mão na massa. E em português:
    http://aurelio.net/regex/

    Abraços do Brasil 😉

    • lmx says:

      Obrigado pela partilha, e sempre muito bom encontrarmos documentação na nossa lingua 😉

      Dá sempre jeito, até porque ninguém sabe tudo e muitas das vezes não te lembras de tudo o que sabes na hora que precisas 😉

Deixe um comentário

O seu endereço de email não será publicado.

You may use these HTML tags and attributes: <a href="" title="" rel=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

Aviso: Todo e qualquer texto publicado na internet através deste sistema não reflete, necessariamente, a opinião deste site ou do(s) seu(s) autor(es). Os comentários publicados através deste sistema são de exclusiva e integral responsabilidade e autoria dos leitores que dele fizerem uso. A administração deste site reserva-se, desde já, no direito de excluir comentários e textos que julgar ofensivos, difamatórios, caluniosos, preconceituosos ou de alguma forma prejudiciais a terceiros. Textos de caráter promocional ou inseridos no sistema sem a devida identificação do seu autor (nome completo e endereço válido de email) também poderão ser excluídos.