Pages : 1
#1 Le 13/02/2012, à 13:04
- iuchiban
Encore et toujours du sed
Bonjour,
Je suis face à un petit soucis de gestion de regex.
Je suis en train de bloquer sur la gestion d'un (MOT) 0 ou 1 fois.
Je récupère dans des conf apache, des lignes de type :
<ifdefine APPPTF> et <ifdefine APPPTFSSL> et j'ai seulement besoin de PTF.
Actuellement, je récupère une liste de ce type (multiples ifdefine) :
APPMABSSL>
APPMAB>
APPMABSSL>
APPMAB>
[...]
APPPRDSSL>
APPPRD>
APPPRDSSL>
APPPRD>
[...]
Donc je voudrais passer cette liste dans un sed me permettant de sortir MAB ou PRD ici, mais sachant que mes PTF peuvent être plus longue suivant l'environnement.
Mes contraintes :
- APP fait toujours 3 caractères
- PTF est une succession de caractères en majuscules, suivi ou pas d'un chiffre [A-Z]*[0-9]*
- SSL apparaît 0 ou 1 fois
Ma commande sed actuelle :
sed 's/^...\([A-Z]*[0-9]*\).*$/\1/'
Me renvoie :
MABSSL
MAB
MABSSL
MAB
[...]
PRDSSL
PRD
PRDSSL
PRD
[...]
C'est donc la gestion de PTF suivi du mot SSL présent 0 ou une fois qui bloque.
J'ai essayé :
sed 's/^...\([A-Z]*[0-9]*\)(SSL)*>$/\1/'
sed 's/^...\([A-Z]*[0-9]*\)(SSL)?>$/\1/'
Si vous savez comment débloquer ça, merci d'avance
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#2 Le 13/02/2012, à 13:13
- sputnick
Re : Encore et toujours du sed
Est-ce que cette commande te simplifierais pas la tache ?
grep -oP "<ifdefine +APP\K[[:alnum:]]+" <fichier>
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#3 Le 13/02/2012, à 13:20
- iuchiban
Re : Encore et toujours du sed
Voilà ce que j'ai
grep: illegal option -- o
grep: illegal option -- P
Usage: grep -hblcnsviw pattern file . . .
SunOS 5.10 inside
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#4 Le 13/02/2012, à 13:28
- sputnick
Re : Encore et toujours du sed
ack -o "^<ifdefine\s+APP\K\w+"
Edit:
Ou encore
perl -lne 'm/<ifdefine\s+APP(\w+)>/ && print $1'
Dernière modification par sputnick (Le 13/02/2012, à 13:49)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 13/02/2012, à 14:35
- Postmortem
Re : Encore et toujours du sed
Salut,
Avec sed et des regex de base, je n'ai réussi à le faire qu'avec 2 commandes « s » :
$ cat test.txt
<ifdefine APPMABSSL>
<ifdefine APPMAB>
<ifdefine APPMABSSL>
<ifdefine APPMAB>
[...]
<ifdefine APPPRDSSL>
<ifdefine APPPRD>
<ifdefine APPPRDSSL>
<ifdefine APPPRD>
[...]
<ifdefine APPUBUSSL>
<ifdefine APPUBU>
<ifdefine APPUBU3SSL>
<ifdefine APPUBU3>
[...]
$ sed '/^<ifdefine/ s/\(SSL\)\{0,1\}>$//
s/^<ifdefine ...\([A-Z][A-Z]*[0-9]\{0,1\}\)$/\1/' test.txt
MAB
MAB
MAB
MAB
[...]
PRD
PRD
PRD
PRD
[...]
UBU
UBU
UBU3
UBU3
[...]
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 13/02/2012, à 14:49
- iuchiban
Re : Encore et toujours du sed
@postmortem : ouais, je sais, je pourrais faire un premier sed pour supprimer le SSL, mais c'était pour essayer de le faire en 1 seule commande
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#7 Le 13/02/2012, à 14:53
- sputnick
Re : Encore et toujours du sed
Le but c'est d'enlever SSL si il est en fin de chaîne filtré ?
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#8 Le 13/02/2012, à 14:57
- Postmortem
Re : Encore et toujours du sed
@postmortem : ouais, je sais, je pourrais faire un premier sed pour supprimer le SSL, mais c'était pour essayer de le faire en 1 seule commande
Ben j'ai fait un seul sed !!! Mais dedans, y-a 2 commandes de substitutions
Édit :
Je me demande si c'est possible avec les regex de base car la regex [A-Z]*[0-9]* matche la chaîne la plus longue possible et donc, s'il n'y a pas de chiffre, ça englobe le SSL.
Dernière modification par Postmortem (Le 13/02/2012, à 15:04)
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#9 Le 13/02/2012, à 15:04
- iuchiban
Re : Encore et toujours du sed
@sputnick : oui.
@postmortem : ok, mais en fait je voudrais savoir s'il y a moyen de gérer la regex "le mot MOT 0 ou 1 fois (ou n fois, n'importe)"
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#10 Le 13/02/2012, à 15:08
- Postmortem
Re : Encore et toujours du sed
Oui : \(MOT\)\{0,1\}
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#11 Le 13/02/2012, à 15:26
- sputnick
Re : Encore et toujours du sed
$ cat /tmp/l
<ifdefine APPMABSSL>
<ifdefine APPMAB>
<ifdefine APPMABSSL>
<ifdefine APPMAB>
<ifdefine APPPRDSSL>
<ifdefine APPPRD>
<ifdefine APPPRDSSL>
<ifdefine APPPRD>
<ifdefine APPFOOSSL>
<ifdefine APPBAR>
$
$ awk -F'<ifdefine APP' '{gsub(/(SSL>|>)/, ""); print $2}' /tmp/l
MAB
MAB
MAB
MAB
PRD
PRD
PRD
PRD
FOO
BAR
Dernière modification par sputnick (Le 13/02/2012, à 15:27)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#12 Le 14/02/2012, à 09:18
- Totor
Re : Encore et toujours du sed
awk -F'<ifdefine APP|>|SSL>' '{ print $2 } ' fichier
-- Lucid Lynx --
Hors ligne