Précédent   Forum des professionnels en informatique > Systèmes > Linux > Système
Système Vos questions autour de l'administration système
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 08/01/2010, 12h21   #1
Rédacteur/Modérateur
 
Avatar de CedrX
 
Inscription : avril 2007
Messages : 1 096
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 1 096
Points : 1 252
Points : 1 252
Par défaut [Expressions régulières] le caractère spécial "?"

Je faisais des petits tests d'expression régulières ce matin et j'avoue que je ne m'explique pas une chose.
Le caractère ? signifie 0 ou 1 occurrence de l'expression recherchée.

Par exemple
correspond à 0 ou 1 caractère "a" dans la chaîne de caractère.

Donc à priori
Code :
1
2
 
$ echo "abc" | sed -n '/a?bc/p'
devrait me reconnaître et me réécrire ma chaîne "abc" sur le terminal (car je rentre bien dans la condition 0 ou 1 a puisqu'il y en a un dans la chaîne de caractères)
Mais ce n'est pas le cas.

par contre ça ça marche
Code :
1
2
3
 
$ echo "abc" | sed -n  '/a*bc/p'
abc
Comprends plus ?
Où est l'erreur dans ma réflexion ?
CedrX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 12h37   #2
Membre Expert
 
Homme
budget et contrôle de gestion
Inscription : décembre 2006
Messages : 865
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 44
Localisation : France

Informations professionnelles :
Activité : budget et contrôle de gestion
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : décembre 2006
Messages : 865
Points : 1 320
Points : 1 320
Salut,

Sous cygwin (j'ai que ca au boulot) cela passe de cette façon :
Code :
$ echo "abc" | sed '/a?bc/p'

J'ai juste supprimer le -n
__________________
Winnt

C'est en Linuxant qu'on devient .... geek

Intel Core i5 750 / 8 Go ram / Hdd 2 To / NVIDIA GeForce GTS 250 1Go sous Gentoo.
Dual core E6300 / 2Go ram / Hdd 1 To / Ati 9800XT sous Debian Testing.
Atom N330 / 4Go ram / Hdd 5To / intel GMA 950 sous Debian Testing
Winnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 12h41   #3
Membre éprouvé
 
Avatar de paissad
 
Homme
Étudiant
Inscription : avril 2006
Messages : 316
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 316
Points : 444
Points : 444
Envoyer un message via Skype™ à paissad
Bonjour CedrX,
alors,il faut que tu mettes un antislash avant le ?
Code :
1
2
echo "abc" | sed -n '/a\?bc/p'
abc
en effet, sed utilise le type regexp BRE ( Basic Regular Expression )
y'a plusieurs de types de regexp, BRE, PCRE ...
t'aurais pu faire comme ceci aussi
Code :
1
2
echo "abc" | sed -n '/a\{0,1\}bc/p'
abc
avec le style BRE, tu echappes "?" .. car c'est considéré comme caractère normal
Cordialement
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Slackware for the Subgenius !
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 13h09   #4
Membre éprouvé
 
Avatar de paissad
 
Homme
Étudiant
Inscription : avril 2006
Messages : 316
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Hérault (Languedoc Roussillon)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2006
Messages : 316
Points : 444
Points : 444
Envoyer un message via Skype™ à paissad
Citation:
Salut,

Sous cygwin (j'ai que ca au boulot) cela passe de cette façon :
Code :
$ echo "abc" | sed '/a?bc/p'
Code résultat :
abc

J'ai juste supprimer le -n
attention wintt, ce n'est pas parce que tu a obtenu le résultat que attendu que ta commande était juste, en effet la preuve est là !
Code :
1
2
echo "abcd" | sed '/a\{3,4\}bcee$/p'
abcd
le fait d'enlever l'option -n laisse afficher la chaine à traiter
donc ce n'est pas du tout la réponse !
dans le manpage de sed, tu peux voir !
Code :
1
2
-n, --quiet, --silent
              suppress automatic printing of pattern space
la commande p ne permet d'afficher que les motifs qui correspondent dans la chaine à traiter
Je suis peut être un peu confus dans mon explication, mais bon ... fallait signaler l'erreur
En résumé: l'option -n ( ne pas afficher la chaine à traiter )
la commande p ( n'afficher que les motifs regex qui correspondent dans la chaine à traiter)
Cordialement,
__________________
Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
Slackware for the Subgenius !
http://blog.paissad.net
paissad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2010, 13h38   #5
Rédacteur/Modérateur
 
Avatar de CedrX
 
Inscription : avril 2007
Messages : 1 096
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 1 096
Points : 1 252
Points : 1 252
Merci beaucoup à vous deux
CedrX est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 23h35.


 
 
 
 
Partenaires

Hébergement Web