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 22/09/2008, à 22:58

yurek

compresser au maximum une commande récurrente

j'essaye de retomber sur la bonne syntaxe de la version du kernel.

Le chiffre de départ est

VERSION_KERNEL_HASH=`uname -r | sed s"/[a-z]\|-\|\.//g"`

Puis on reconvertit :

echo VERSION_KERNEL_HASH | sed s"/./&./"| sed s"/.../&./"| sed s"/....../&-/"

Comment obtenir la meme chose en une commande  sed ?

Dernière modification par yurek (Le 22/09/2008, à 23:00)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#2 Le 22/09/2008, à 23:00

yurek

Re : compresser au maximum une commande récurrente

La meme demande pour grep

grep -v $VERSION_KERNEL | grep -v $CONSERV


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#3 Le 23/09/2008, à 10:18

tiky

Re : compresser au maximum une commande récurrente

Pour la première commande:

echo VERSION_KERNEL_HASH | sed -e s"/^\([0-2]\)\([0-9]\)\([0-9]\{1\,2\}\)\([0-9]\)/\1.\2.\3-\4/"

Pour le deuxième ce n'est pas possible, bien que grep supporte les expressions relationnelles à travers l'option -e, il ne supporte pas les caractères opérations étendues comme |. On ne peut donc pas proposer plusieurs alternatives. La solution c'est d'utiliser awk à la place.

Dernière modification par tiky (Le 23/09/2008, à 10:29)


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#4 Le 23/09/2008, à 11:20

yurek

Re : compresser au maximum une commande récurrente

Je connais pas awk , comment on pourrait faire le sed est trop long je trouve. ( et trop compliqué )
Merci


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#5 Le 23/09/2008, à 11:56

Totor

Re : compresser au maximum une commande récurrente

Salut,

tiky a écrit :

Pour la première commande:

echo VERSION_KERNEL_HASH | sed -e s"/^\([0-2]\)\([0-9]\)\([0-9]\{1\,2\}\)\([0-9]\)/\1.\2.\3-\4/"

Pour le deuxième ce n'est pas possible, bien que grep supporte les expressions relationnelles à travers l'option -e, il ne supporte pas les caractères opérations étendues comme |. On ne peut donc pas proposer plusieurs alternatives. La solution c'est d'utiliser awk à la place.

Si, grep le permet :

>echo -e "1\n2\n3"|grep -E '1|3'
1
3
>echo -e "1\n2\n3"|grep '1\|3'
1
3

et pour le problème initial, ceci devrait faire l'affaire:

uname -r|sed 's/\.[a-zA-Z]*$//'

EDIT : je ne sais pas s'il est possible qu'il y est des chiffres dans le nom/type mais si c'est le cas il est préférable d'utiliser ceci :

uname -r|sed 's/^\([.0-9-]*\)*\..*$/\1/'

Dernière modification par Totor (Le 23/09/2008, à 12:10)


-- Lucid Lynx --

Hors ligne

#6 Le 23/09/2008, à 12:04

tiky

Re : compresser au maximum une commande récurrente

Ta commande sed ne fonctionne pas avec toutes les versions du Kernel, le nombre de chiffre est variable, tu peux avoir:
2.6.3
2.6.3-4
2.6.10
2.6.10-4
...
Voilà un sed plus court mais moins stricte...

echo VERSION_KERNEL_HASH | sed -e s"/^\(.\)\(.\)\([0-9]\{1,2\}\)\(.\)$/\1.\2.\3-\4/"

Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#7 Le 23/09/2008, à 12:31

tiky

Re : compresser au maximum une commande récurrente

Effectivement je ne connaissais pas l'option -E ( extended-regexp ), très pratique, merci wink


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#8 Le 23/09/2008, à 23:07

yurek

Re : compresser au maximum une commande récurrente

merci


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#9 Le 24/09/2008, à 09:43

Alain.g

Re : compresser au maximum une commande récurrente

tiky a écrit :

Effectivement je ne connaissais pas l'option -E ( extended-regexp )

C'est plus connu sous le nom egrep


Xubuntu Karmic !

Hors ligne

#10 Le 24/09/2008, à 10:37

tiky

Re : compresser au maximum une commande récurrente

Oui je connais egrep, enfin je m'en suis pas servi jusqu'à présent, merci wink


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#11 Le 06/10/2008, à 16:17

yurek

Re : compresser au maximum une commande récurrente

Je voudrais vérifier une IP

cat s | egrep [0-9][.]| sed -e s"/^[0-9].\.[0-9].\.[0-9].\./&/g"
82.64.71.226
82.64.71.226
4482.2264.71.226


Comment supprimer la dernière ligne qui n'est pas conforme a une adresse IP ?
Possible de compacter le sed ?
Possible d'ajouter la vérification une IP va de 0.0.0.0 a 255.255.255.255 donc si un groupe est supérieur a 255 on l'élimine ?

Merci.

Dernière modification par yurek (Le 06/10/2008, à 16:18)


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#12 Le 06/10/2008, à 18:05

tiky

Re : compresser au maximum une commande récurrente

Un peu mieux:

cat s | egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}$'

Trouve toutes les chaînes de la forme:
0.0.0.0 à 999.999.999.999

Et plus besoin de sed. ( Tu peux aussi mettre sed à la place mais il faut utiliser des \ devant les ( et les { ).

Dernière modification par tiky (Le 06/10/2008, à 18:08)


Conseil d'expert: il vous faut un dentifrice adapté...

Hors ligne

#13 Le 06/10/2008, à 18:06

Alain.g

Re : compresser au maximum une commande récurrente

yurek a écrit :

Possible d'ajouter la vérification une IP va de 0.0.0.0 a 255.255.255.255

Oui,  il faut utiliser l'opérateur de choix (|) pour y aller petit à petit :
on couvre les nombres de 0 à 199 : [0-1]?[0-9][0-9]?
de 200 à 249 : 2[0-4][0-9]
et de 250 à 255 : 25[0-5]
On met tout à la suite en séparant par | pour spécifier qu'il faut que ça corresponde à un de ces trois cas là.

Exemple concret :

verif_ip () {
	if echo "$1" | egrep -q '^(([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$'
	then echo "$1 = IP valide"
	else echo "$1 = IP non valide"
	fi
}
verif_ip 82.64.71.226
verif_ip 4482.2264.71.226

si c'est du bash, il est possible d'utiliser la commande de test étendue [[  (plus rapide que echo|grep -q)

#!/bin/bash
verif_ip () {
	if [[ "$1" =~ ^(([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])$ ]]
	then echo "$1 = IP valide"
	else echo "$1 = IP non valide"
	fi
}
verif_ip 82.64.71.226
verif_ip 4482.2264.71.226

Dernière modification par Alain.g (Le 06/10/2008, à 18:13)


Xubuntu Karmic !

Hors ligne

#14 Le 06/10/2008, à 18:52

Alain.g

Re : compresser au maximum une commande récurrente

Je ne sais pas si ça vaut le coup de le signaler, mais on peut faire plus court avec pcregrep (pas installé d'origine mais dans les dépôts) :

verif_ip () {
  if echo "$1" | pcregrep -q '^(([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.(?!$)|$)){4}'
  then echo "$1 = IP valide"
  else echo "$1 = IP non valide"
  fi
}

Xubuntu Karmic !

Hors ligne

#15 Le 06/10/2008, à 20:02

yurek

Re : compresser au maximum une commande récurrente

MERCI, mais je comprends pas les commandes une petites explications ?


http://doc.ubuntu-fr.org/installation/debutants
http://doc.ubuntu-fr.org/diagnostic
http://doc.ubuntu-fr.org/diagnostic_outils
http://doc.ubuntu-fr.org/reflexe_ubunteros

Hors ligne

#16 Le 06/10/2008, à 21:48

Link31

Re : compresser au maximum une commande récurrente

Si le but est de faire court...

a() { pcregrep -q '^(([0-1]?[0-9][0-9]?|2[0-4][0-9]|25[0-5])(\.(?!$)|$)){4}' <<< $1 && echo "$1 = IP valide" || echo "$1 = IP non valide"; }
a 82.64.71.226

Hors ligne

#17 Le 06/10/2008, à 22:17

Alain.g

Re : compresser au maximum une commande récurrente

Si le but est de faire court, tu peux gagner 10 caractères en remplaçant les [0-9] par \d et le [0-1] par [01]

pcregrep -q '^(([01]?\d\d?|2[0-4]\d|25[0-5])(\.(?!$)|$)){4}'

Xubuntu Karmic !

Hors ligne