[script shell] expression régulière qui ne marche pas, et qui pourtant devrait |
Bienvenue invité ( Connexion | Inscription )
[script shell] expression régulière qui ne marche pas, et qui pourtant devrait |
28 Nov 2015, 18:44
Message
#1
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 727 Inscrit : 8 Aug 2007 Membre no 92 144 |
Bonjour à tous,
Je bute sur un truc incompréhensible dans un petit script shell que j'ai écrit. Il sert à reformater des fichiers textes avec Sed, tout fonctionne parfaitement, mais à la toute fin je dois supprimer les lignes qui contiennent 1, 2, 3 ou 4 chiffres suivis d'un point. Ces lignes ne contiennent que cela, sans aucun espace ni tabulation, et aucune autre ligne ne contient ce genre de pattern, il devrait donc suffire pour matcher à tous les coups : Code sed '/[0-9][0-9]?[0-9]?[0-9]?\./d' Lorsque je teste avec cet outil : http://www.annuaire-info.com/outil-referen...sion-reguliere/ Ca fonctionne toujours. Mais dans mon script, non. Quelqu'un aurait une idée ? Je fais tourner ce script avec Bash 3.2.48(1)-release, livré d'origine avec mon 10.7.5. D'avance merci. -------------------- Mac Mini 2012
Macbook Air 2013 Mac Pro 1,1 Mac Pro 5,1 HP EliteBook 840 G2 NUC7i3BNH - Core i3-7100U @ 2.4GHz - 16Go RAM - SSD Sata Sandisk 480Go et tout une tripotée de stations i7 et Xeon. |
|
|
28 Nov 2015, 20:14
Message
#2
|
|
Terminaltor Moderating Machine Groupe : Admin Messages : 24 449 Inscrit : 25 Oct 2002 Lieu : Jeumont (59) Membre no 4 319 |
C’est une expression régulière perl, pas unix ; elle fonctionnera avec :
Code perl -pe 's/[0-9][0-9]?[0-9]?[0-9]?\.//'
-------------------- I think therefore I Mac
|
|
|
28 Nov 2015, 21:03
Message
#3
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 727 Inscrit : 8 Aug 2007 Membre no 92 144 |
Mais elle devrait fonctionner aussi avec sed, non ?
EDIT : en effet, perl arrive à matcher l'expression régulière que sed ne prend pas, mais du coup ça n'efface pas la ligne entière, comme sed le ferait avec sa interne commande 'd'. Je vais vois si j'y arrive avec awk, du coup. Ce message a été modifié par Papalou - 28 Nov 2015, 21:29. -------------------- Mac Mini 2012
Macbook Air 2013 Mac Pro 1,1 Mac Pro 5,1 HP EliteBook 840 G2 NUC7i3BNH - Core i3-7100U @ 2.4GHz - 16Go RAM - SSD Sata Sandisk 480Go et tout une tripotée de stations i7 et Xeon. |
|
|
28 Nov 2015, 22:25
Message
#4
|
|
Terminaltor Moderating Machine Groupe : Admin Messages : 24 449 Inscrit : 25 Oct 2002 Lieu : Jeumont (59) Membre no 4 319 |
Le méta-caractère '?' (qui veut dire 0 ou une occurrence) n’existe pas dans les expressions régulières Unix (ed, vi, ex, sed, awk).
Si je ne m’abuse, ce que tu cherches à faire n’est pas faisable avec les expressions régulières Unix qui n’ont pas non plus d’opérateur « ou ». Par contre, il existe de multiples manières de le faire avec les expressions perl ; de la plus longue à la plus courte : ^(?:[0-9]|[0-9][0-9]|[0-9][0-9][0-9]|[0-9][0-9])\.$ ^[0-9][0-9]?[0-9]?[0-9]?\.$ ^[0-9](?:[0-9]?){3}\.$ ^[0-9][0-9]{,3}\.$ ^[0-9]{1,4}\.$ -------------------- I think therefore I Mac
|
|
|
29 Nov 2015, 00:02
Message
#5
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 727 Inscrit : 8 Aug 2007 Membre no 92 144 |
Je viens de vérifier, ça matche aussi avec awk. Merci pour ton aide, problème résolu, j'ai même le choix entre perl et awk !
Ce message a été modifié par Papalou - 29 Nov 2015, 00:03. -------------------- Mac Mini 2012
Macbook Air 2013 Mac Pro 1,1 Mac Pro 5,1 HP EliteBook 840 G2 NUC7i3BNH - Core i3-7100U @ 2.4GHz - 16Go RAM - SSD Sata Sandisk 480Go et tout une tripotée de stations i7 et Xeon. |
|
|
29 Nov 2015, 00:12
Message
#6
|
|
Terminaltor Moderating Machine Groupe : Admin Messages : 24 449 Inscrit : 25 Oct 2002 Lieu : Jeumont (59) Membre no 4 319 |
Effectivement, awk semble implémenter les « extended regular expressions » qui sont grosso modo compatibles avec les expressions régulières perl.
Apparemment 'sed' aussi en fait, avec l’option -E Code -E Interpret regular expressions as extended (modern) regular expressions rather than basic regular expressions (BRE's). The re_format(7) manual page fully describes both formats. Code schlum$ echo "a\n1.\n23.\n4" | sed -E '/[0-9]{1,4}\./d'
a 4 00:08:12 [~] schlum$ -------------------- I think therefore I Mac
|
|
|
30 Nov 2015, 14:58
Message
#7
|
|
Macbidouilleur d'argent ! Groupe : Membres Messages : 727 Inscrit : 8 Aug 2007 Membre no 92 144 |
J'ai tendance à me méfier de sed -e, peut-être à tort, pour des raisons de portabilité.
Je pensais vraiment que le '?' faisait partie du jeu des expressions standards, merci encore de m'avoir remis les pendules à l'heure sur ce point en tout cas. Ce message a été modifié par Papalou - 30 Nov 2015, 15:01. -------------------- Mac Mini 2012
Macbook Air 2013 Mac Pro 1,1 Mac Pro 5,1 HP EliteBook 840 G2 NUC7i3BNH - Core i3-7100U @ 2.4GHz - 16Go RAM - SSD Sata Sandisk 480Go et tout une tripotée de stations i7 et Xeon. |
|
|
Nous sommes le : 26th April 2024 - 14:57 |