Partage
  • Partager sur Facebook
  • Partager sur Twitter

Les expressions régulières

Raccourcir le code

Sujet résolu
    23 septembre 2018 à 14:33:26

    Bonjour à tous,

    Serait-il possible de raccourcir l'expression régulière suivante :

    if [[ "$maCronTabReboot" =~ [^\\#\\s\\*\\s\\*\\s\\*\\s\\*\\s\\*\\s\\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\\l\\R\\e\s\\e\a\\u] ]]

    Si oui, comment ?

    Merci.

    • Partager sur Facebook
    • Partager sur Twitter
      23 septembre 2018 à 17:52:14

      salut,

      en nous précisant le motif recherché !

      en retirant toutes les barres diagonales inverses inutiles.

      en indiquant entre accolades le nombre ou la plage de nombres de fois qu'un même motif se répète à la suite.

      en réfléchissant au lieu de copier/coller le résultat d'un mauvais générateur de regex.

      NB :

      entre [[
      - les guillemets sont facultatifs.
      - les regex sont de préférences mises dans une variable, pour inhiber certains caractères spéciaux.

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        24 septembre 2018 à 9:05:20

        Salut,

        J'ai tenté d'utiliser les accolades mais ça ne fonctionne pas.

        En retirant les barres diagonales inverses, ça ne fonctionne pas non plus.

        J'ai le bon REGEX, je me demande juste comment le raccourcir.

        Je n'ai pas copié un résultat d'un générateur quelconque.

        Je vais tenter de le mettre dans une variable et de voir ce que cela donne.

        Merci pour ces précisions.

        -
        Edité par LeZero07 24 septembre 2018 à 9:05:35

        • Partager sur Facebook
        • Partager sur Twitter
          24 septembre 2018 à 9:25:16

          donne-nous le fichier, ou un extrait, et l'expression cherchée, stp; on ne peux pas avancer sans ça.
          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            24 septembre 2018 à 10:24:43

            Il y a 2 fichiers.

            Le premier :

            #!/bin/bash
            
            echo "Tentative de modification du fichier crontab"
            crontab -l > /home/jean/cronTab/maCronTabReboot
            maCronTabReboot=$(cat /home/jean/cronTab/maCronTabReboot)
            if [[ "$maCronTabReboot" =~ [^\\#\\s\\*\\s\\*\\s\\*\\s\\*\\s\\*\\s\\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\\l\\R\\e\s\\e\a\\u] ]]
            then
                    echo "Remplacement du fichier cronTab en cours"
                    sed s/^\\#\\s\\*\\s\\*\\s\\*\\s\\*\\s\\*\\s\\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\\l\\R\\e\s\\e\a\\u/\*\ \*\ \*\ \*\ \*\ \\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\l\R\\e\s\\e\a\u/ /home/jean/cronTab/maCronTabReboot > /home/jean/cronTab/maCronTabReboot2
            crontab /home/jean/cronTab/maCronTabReboot2
                    echo "Remplacement du fichier cronTab reussi"
            else
                    echo "Remplacement non necessaire"
            fi
            

            Le deuxième fichier :

            #!/bin/bash
            ### BEGIN INIT INFO
            # Provides: lReseau
            # Required-Start: $syslog $named $local_fs $remote_fs
            # Required-Stop:
            # Default-Start: 2 3 4 5
            # Default-Stop: 0 1 6
            # Short-Description:Montage
            # Description: Montage d un lecteur reseau
            ### END INIT INFO
            
            lMonte=0
            
            modificationDuFichierCronTab()
            {
                    echo "Modification du fichier crontab"
                    crontab -l > /home/jean/cronTab/maCronTab
                    sed s/^\\*\ \\*\ \\*\ \\*\ \\*\ \\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\l\R\\e\s\\e\a\u/\\#\ \\*\ \\*\ \\*\ \\*\ \\*\ \\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\l\R\\e\s\\e\a\u/ /home/jean/cronTab/maCronTab > /home/jean/cronTab/maCronTab2
            }
            
            
            monter()
            {
                    df -h > /home/jean/scripts/df.sh
                    grep lezero /home/jean/scripts/df.sh > /home/jean/scripts/grep.sh
                    chaineGrep=`cat /home/jean/scripts/grep.sh`
                    echo "$chaineGrep"
                    if [ -z "$chaineGrep" ]
                    then
                            lMonte=0
                            echo 'lMonte = '
                            echo $lMonte
                    else
                            lMonte=1
                            echo "lMonte = "
                            echo $lMonte
                    fi
            
                    if [ $lMonte = 0 ]
                    then
                            echo "Montage du lecteur"
                            mount -t cifs -o credentials=/root/.smbcredentials //lezero/partage /media/partage
                            modificationDuFichierCronTab
                    else
                            echo "Le lecteur est deja monte et le script n'aurait pas du etre effectue"
                            modificationDuFichierCronTab
                    fi
            }
            
            demonter()
            {
            umount -a
            }
            
            case "$1" in
                    start)
                        monter
                        exit 0
                    ;;
            
                    stop)
                        demonter
                        exit 0
                    ;;
            
                    *)
                    echo "** Usage: /etc/init.d/mLLReseau.sh {start|stop}  ** "
                    echo "** Le lecteur est monte par defaut **"
                    /etc/init.d/lReseau start
                    exit 0
                    ;;
            esac
            Il n'est pas optimisé mais il fonctionne.



            -
            Edité par LeZero07 24 septembre 2018 à 10:45:04

            • Partager sur Facebook
            • Partager sur Twitter
              24 septembre 2018 à 15:40:25

              tu n'as pas compris.

              il nous faut le fichier que tu veux traiter : ta crontab.
              ainsi que l'expression qui fera "remonter" la ligne

              voilà un début  de réponse :

              regex='^#( \*){3}'; line='# * * *'; [[ $line =~ $regex ]] && echo "$line"
              # * * *



              • Partager sur Facebook
              • Partager sur Twitter

              Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                24 septembre 2018 à 16:21:45

                Le fichier que je veux traiter est (crontab -e) :

                # * * * * * /etc/init.d/lReseau

                L'expression qui fera remonter la ligne est :

                ^\\#\\s\\*\\s\\*\\s\\*\\s\\*\\s\\*\\s\\/\\e\t\c\\/\\i\n\\i\t\\.\d\\/\\l\\R\\e\s\\e\a\\u

                Merci pour ce début de réponse.

                • Partager sur Facebook
                • Partager sur Twitter
                  24 septembre 2018 à 16:29:58

                  $> regex='^#( \*){5} /etc/init.d/lReseau$'; line='# * * * * * /etc/init.d/lReseau'; [[ $line =~ $regex ]] && echo "$line"
                  # * * * * * /etc/init.d/lReseau
                  $> regex='^#( \*){5} /etc/init.d/lReseau$'; line='# * * * * * /etc/init.d/lReseau'; echo "$line" | grep -E "$regex"
                  # * * * * * /etc/init.d/lReseau
                  $> regex='^#( \*){5} \/etc\/init.d\/lReseau$'; line='# * * * * * /etc/init.d/lReseau'; echo "$line" | sed -nr '/'"$regex"'/p'
                  # * * * * * /etc/init.d/lReseau

                  le $> en début ligne est le PROMPT du terminal.

                  -
                  Edité par dantonq 24 septembre 2018 à 16:30:59

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

                    25 septembre 2018 à 10:14:04

                    Parfait, merci, ça fonctionne !!!

                    J'avais compris pour le prompt mais c'est toujours mieux avec un complément d'information :)

                    Bonne journée à vous tous.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Les expressions régulières

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown