Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile


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 smile

grep: illegal option -- o
grep: illegal option -- P
Usage: grep -hblcnsviw pattern file . . .

SunOS 5.10 inside smile


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+"

http://betterthangrep.com/

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 smile


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

iuchiban a écrit :

@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 smile

Ben j'ai fait un seul sed !!! Mais dedans, y-a 2 commandes de substitutions tongue
É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