Logo journal du hacker middle
  1. 5
  1.  

  2. 1

    Votre documentation m’apparaît comme un condensé d’expériences et de techniques. C’est très bien car cela a pour but d’éclairer les choses. Néanmoins, je suis moins convaincu par la méthode en général. J’ai un livre sur le langage Python qui est élaboré suivant le même principe, et au final, je n’y ai pas compris grand chose. Ce qui me chagrine un peu c’est la mise en perspective, avec des contradictions apparentes.

    C’est l’outil idéal dans telle ou telle situation mais … l’élaboration d’un motif peut devenir complexe et peut aboutir malencontreusement à des erreurs. C’est l’outil idéal pour manipuler du texte mais … il existe aussi divers autres outils.

    Efficacité : Les regex permettent de réaliser des opérations complexes sur des chaînes de texte avec un minimum de code. Ce qui pourrait prendre des dizaines de lignes de code en logique conditionnelle peut souvent être accompli en une seule ligne avec une expression régulière bien construite.

    Laisser penser que le concept apporte de la performance est maladroit.

    Unlike several other scripting languages, Lua uses neither POSIX regex nor Perl regular expressions for pattern matching. The main reason for this decision is size: a typical implementation of POSIX regular expressions takes more than 4000 lines of code, which is more than half the size of all Lua standard libraries together. In comparison, the implementation of pattern matching in Lua has less than 600 lines. Of course, pattern matching in Lua cannot do all that a full POSIX implementation does. Nevertheless, pattern matching in Lua is a powerful tool, and includes some features that are difficult to match with standard POSIX implementations.

    Extrait du livre : Programming in Lua, 4th edition.

    1. 1

      https://regexcrossword.com pour s’entrainer :)

      1. 1

        Note : J’ai relevé un usage à contre-emploi. Cela paraît intuitif de combiner la commande grep avec xargs car l’utilisateur peut vouloir afficher la liste des fichiers correspondant puis ensuite vouloir éditer automatiquement ces fichiers. Néanmoins, on recherche un motif deux fois successivement en lançant deux processus : grep et sed.

        grep -rl "srobert@example.com" . | xargs sed -i 's/srobert@example.com/MY_EMAIL_ADDRESS/g'
        

        Les lignes de commande suivantes me paraissent plus justes.

        find . -type f -exec sed -i 's/srobert@example.com/MY_EMAIL_ADDRESS/g' {} +
        find . -type f -print0 | parallel -m -0 sed -i 's/srobert@example.com/MY_EMAIL_ADDRESS/g' {}
        
        1. 1

          En fait, ces commandes ne donnent pas les résultats attendus en terme de performance.

          L’invocation de commande avec find, parallel et sed :

          $ time -p find -L OpenWrt -type f -print0 2>/dev/null | parallel -m -0 sed -nE 's/mail@danrl.com/MY_EMAIL_ADDRESS/gp' {}
          real 16,46
          user 32,48
          sys 12,96
          

          L’invocation de commande avec grep et sed :

          real 11,13
          user 6,40
          sys 4,72
          

          L’invocation de commande avec find, xargs (-P15) et sed :

          real 3,11
          user 30,29
          sys 8,20