|
|
|
|
Slt à tous.
Une fois encore j'ai des problèmes avec les expressions régulières.
Je reçois ds mon programme shell deux paramètres dates du genre 0601 et 0630 (du 01 juin au 30juin).
Je fais un sed sur un fichier histoire de trver les lignes ki contiennent des dates comprises entre ces deux dates.
Mon fichier est de la forme:
http://cjoint.com/data/iqopJC7GXy.htm
j'ai essayé un truc de la forme sed -e "/^blablabla[$2-$3]/!d fich
j'ai un message d'erreur du genre "sed invalide range end"
Lookouster.partager.cècool!!Configuration: Windows XP
Internet Explorer 6.0
Salut,
lami20j@deb:~$ cat Desktop/boutfich.htm 3226220205011533372001 97983928 00008020000028000003 0 3227220206011533373001 95572928 00000020400000000000 0 322802020601153337601 21383551 00011010000042000001 0 32290102061015333821313480 20223249 00003020001031000032 0 3230220206111533372001 97387721 00008020000013000002 0 3231220206211533374010 90010174 00008020000043000005 0 3232220206291533374010 90933877 00008020000006000001 0 3233220206301533372001 97237383 00000020400000000000 0 323402020630153338701 80100000 00021010002826000010 0 3235220207011533382001 97136268 00000020400000000000 0 3236220207011533383001 90038265 00000020400000000000 0 lami20j@deb:~$ cat Desktop/boutfich.htm | sed '/06\([0-2][0-9]\|30\)/!d' 3227220206011533373001 95572928 00000020400000000000 0 322802020601153337601 21383551 00011010000042000001 0 32290102061015333821313480 20223249 00003020001031000032 0 3230220206111533372001 97387721 00008020000013000002 0 3231220206211533374010 90010174 00008020000043000005 0 3232220206291533374010 90933877 00008020000006000001 0 3233220206301533372001 97237383 00000020400000000000 0 323402020630153338701 80100000 00021010002826000010 0 lami20j@deb:~$ cat Desktop/boutfich.htm | sed '/06\([0-2][0-9]\|30\)/d' 3226220205011533372001 97983928 00008020000028000003 0 3235220207011533382001 97136268 00000020400000000000 0 3236220207011533383001 90038265 00000020400000000000 0 lami20j@deb:~$-- lami20j |
Salut,
|
Hello,
|
Salut,
#!/bin/bash
echo -e "Entrez mois : \c"
read mois
echo -e "Entrez jour debut : \c"
read jdeb
echo -e "Entrez jour fin : \c"
read jfin
while read ligne
do
m=${ligne:8:2}
j=${ligne:10:2}
if [ $m -eq $m -a $j -ge $jdeb -a $j -le $jfin ]
then
echo $ligne
fi
done < aaa
lami20j@debian:~$ cat aaa
322802020501153337601
322802020601153337601
322802020601153337601
322802020602153337601
322802020603153337601
322802020610153337601
322802020610153337601
322802020610153337601
322802020610153337601
322802020615153337601
322802020617153337601
322802020630153337601
322802020701153337601
lami20j@debian:~$ sh ccm.sh
Entrez mois : 06
Entrez jour debut : 9
Entrez jour fin : 22
322802020610153337601
322802020610153337601
322802020610153337601
322802020610153337601
322802020615153337601
322802020617153337601
lami20j@debian:~$
lami20j |
Ce n'est qu'un exemple
|
if [ $m -eq $mois -a $j -ge $jdeb -a $j -le $jfin ]j'ai fait une erreur (correction en gras), désolé SI $m (m c'est le mois dans ta chaine) est égal avec $mois (ce que tu saisi) AND $j (j c'est le jour dans la chaine) est plus grand ou égal que $jdeb (ta saisie) AND le même $j est plus petit ou égal que $jfin (ta saisie) ALORS alors affiche la ligne IS (END SI) lami20j Configuration: Windows XP Internet Explorer 6.0 |
Salut,
if [ $m -eq $mois -a $j -ge $jdeb -a $j -le $jfin ]Ce qui revient à dire : if = si $m = la variable $m (contenant le 8ème et 9ème caractère) -eq = est égale $mois = à la variable $mois (premier "read" du script) -a = ET $j = la variable $j (contenant le 10ème et 11ème caractère) -ge = est plus grande que $jdeb = la variable $jdeb (2ème "read" du script) -a = ET $j = la variable $j (contenant le 10ème et 11ème caractère) -le = est plus petite que $jfin = la variable $jfin (3ème "read" du script) ;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé.
|
Dites, j'ai un autre problème mais sous HP-UX. Je multiplie une variable par 17 c'est à dire
|