Sed et l'horloge en référence ?
Résolu/Fermé
A voir également:
- Sed et l'horloge en référence ?
- Reference pto - Accueil - Box & Connexion Internet
- Horloge en ligne aesthetic - Télécharger - Thèmes & Fonds d'écran
- Horloge mondiale gratuite - Télécharger - Divers Utilitaires
- Télécharger horloge gratuit pour portable - Télécharger - Guide Android
- Météo & Horloge Widget Android - Télécharger - Divers Utilitaires
7 réponses
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 août 2007 à 20:45
16 août 2007 à 20:45
Salut,
Essaie ça :
Essaie ça :
sed '/'$(date "+%H:%M")'/d' fichier.txt;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
16 août 2007 à 22:22
16 août 2007 à 22:22
Oups sorry j'ai fait une erreur, j'avais compris que tu voulais effacer toutes les lignes correspondants à l'heure, donc tu l'auras compris le "d" sert à effacer la (les) ligne(s) en question.
Donc essayes comme ça :
;-))
Donc essayes comme ça :
sed '/'$(date "+%H:%M")'/!d' -e 's/#/\&=/g' -e 's/"//g' fichier.txt > fichier2.txtle "!" devant le "d" exprime la négation, donc toutes les lignes qui ne correspondent pas à l'heure ne seront pas envoyées dans le fichier.
;-))
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
neo
16 août 2007 à 23:06
16 août 2007 à 23:06
T'as bien tapé la même ligne que je t'ai mise au post précédent ?
Quel shell utilises-tu ?
Quel shell utilises-tu ?
neo
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
16 août 2007 à 23:12
16 août 2007 à 23:12
Shell ? Qu'entend tu par Shell ? navré mais je débute réellement. Je suis sous Windows XP et j'utilise Cygwin.
GNU bash, version 3.2.17(15)-release (i686-pc-cygwin)
Sinon oui j'ai tappé exactement la même chose.
GNU bash, version 3.2.17(15)-release (i686-pc-cygwin)
Sinon oui j'ai tappé exactement la même chose.
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
16 août 2007 à 23:26
16 août 2007 à 23:26
Shell c'est l'interpréteur de commande, "bash" dans ton cas comme tu l'as noté...
Bon essaye ça alors :
;-))
Bon essaye ça alors :
sed '/'$(date "+%H:%M")'/!d; s/#/\&=/g; s/"//g' fichier.txtOn supprime les "-e" qui apparemment fichent la zone et on les remplace par des ";".
;-))
neo
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
17 août 2007 à 00:38
17 août 2007 à 00:38
Tu es un chef Jipicy, non seulement parce que ça fonctionne, mais surtout pour l'attention que tu as bien voulu porter à mon probléme !
Un grand merci à toi !
ps : je saurai ou sonner la prochaine fois que je buterai sur un probléme :p
Un grand merci à toi !
ps : je saurai ou sonner la prochaine fois que je buterai sur un probléme :p
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
17 août 2007 à 17:06
17 août 2007 à 17:06
Bon on va essayer de te dépatouiller un peu...
Déjà tu l'as très bien déduit d'ailleurs, effectivement pour "sed" si dans le motif recherché il y a des "/" ça fiche un peu le boxon, donc il suffit de changer le caractère séparateur de "sed". Exemple :
Ensuite concernant les dates (autant inclure directement dans le format les mêmes caractères se trouvant dans le motif à rechercher, autrement dit un "#" (dièse) et un ' " ' (guillemet)) :
date + heure (- 45 minutes) :
date + heure (+ 45 minutes) :
A toi de t'arranger avec ça pour faire ta recherche, mais ça va pas être coton ;-((
Bon courage ;-))
Déjà tu l'as très bien déduit d'ailleurs, effectivement pour "sed" si dans le motif recherché il y a des "/" ça fiche un peu le boxon, donc il suffit de changer le caractère séparateur de "sed". Exemple :
sed 's|motif|chaine|' fichou tout autre caractère ne se trouvant pas dans les motif (ou la chaine de remplacement).
Ensuite concernant les dates (autant inclure directement dans le format les mêmes caractères se trouvant dans le motif à rechercher, autrement dit un "#" (dièse) et un ' " ' (guillemet)) :
date + heure (- 45 minutes) :
date "+%d/%m/%y\"#%H:%M" --date="-45 minutes"
date + heure (+ 45 minutes) :
date "+%d/%m/%y\"#%H:%M" --date="+45 minutes"
A toi de t'arranger avec ça pour faire ta recherche, mais ça va pas être coton ;-((
Bon courage ;-))
Effectivement ce n'est pas simple, aprés plusieurs tests une question me vient à l'ésprit :
Si mon horloge affiche 16h00, et que je lui retranche -45 minutes
date "+%d/%m/%y\"#%H:%M" --date="-45 minutes"
Est ce qu'il va prendre en compte la tranche horaire de 15h15 à 16h, ou bien est ce qu'il comprend qu'il doit chercher 15h15 pile ? Car si il cherche 15h15 c'est la cata :)
( Je viens de tenter de vérifier mais j'ai rien du tout dans mon fichier de sortie )
C'est d'autant plus étrange que Sed ne m'affiche pas de message d'erreur, c'est juste que mon fichier de sortie est vide :p
Pour simplifier je commence par changer mes "/", sinon je n'y arrive pas :
sed 's|/|:|' fichier1>fichier2
Ensuite je reprend mon fichier 2 et je fais ma comparaison avec la date en retranchant 45 minutes pour le moment car je ne sais pas encore comment integrer la ligne pour ajouter 45 minutes ;p
sed '/'$(date "+%d:%m:%y\"#%H:%M" --date="-45 minutes")'/!d fichier2>fichier3
Donc tout va bien, pas d'erreur, mais mon fichier est vide, il ne me sort rien pour 15h15 précise, ni pour la tranche horaire de 15h15 a 16h00
Je continue de chercher ;)
Si mon horloge affiche 16h00, et que je lui retranche -45 minutes
date "+%d/%m/%y\"#%H:%M" --date="-45 minutes"
Est ce qu'il va prendre en compte la tranche horaire de 15h15 à 16h, ou bien est ce qu'il comprend qu'il doit chercher 15h15 pile ? Car si il cherche 15h15 c'est la cata :)
( Je viens de tenter de vérifier mais j'ai rien du tout dans mon fichier de sortie )
C'est d'autant plus étrange que Sed ne m'affiche pas de message d'erreur, c'est juste que mon fichier de sortie est vide :p
Pour simplifier je commence par changer mes "/", sinon je n'y arrive pas :
sed 's|/|:|' fichier1>fichier2
Ensuite je reprend mon fichier 2 et je fais ma comparaison avec la date en retranchant 45 minutes pour le moment car je ne sais pas encore comment integrer la ligne pour ajouter 45 minutes ;p
sed '/'$(date "+%d:%m:%y\"#%H:%M" --date="-45 minutes")'/!d fichier2>fichier3
Donc tout va bien, pas d'erreur, mais mon fichier est vide, il ne me sort rien pour 15h15 précise, ni pour la tranche horaire de 15h15 a 16h00
Je continue de chercher ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
19 août 2007 à 18:10
19 août 2007 à 18:10
Effectivement ce n'est pas simple,
Ça je t'avais prévenu ;-))
aprés plusieurs tests une question me vient à l'ésprit :
Si mon horloge affiche 16h00, et que je lui retranche -45 minutes
date "+%d/%m/%y\"#%H:%M" --date="-45 minutes"
Est ce qu'il va prendre en compte la tranche horaire de 15h15 à 16h, ou bien est ce qu'il comprend qu'il doit chercher 15h15 pile ? Car si il cherche 15h15 c'est la cata :)
Ben non il ne prendra pas l'intervalle, mais l'heure avec les 45 minutes soustraites :
Pour simplifier je commence par changer mes "/", sinon je n'y arrive pas :
sed 's|/|:|' fichier1>fichier2
Ben c'est pas nécessaire, suffit de composer toutes tes commandes "sed" avec des pipes ( | ) à la place des slashs ( / ), puis à garder ta ligne, rajoute le "g" final pour global, dans tes dates dans ton fichier il y a 2 slashs, ta syntaxe actuelle ne remplace que le 1er... donc :
sed 's|/|:|g' fichier1>fichier2
Ensuite je reprend mon fichier 2 et je fais ma comparaison avec la date en retranchant 45 minutes pour le moment car je ne sais pas encore comment integrer la ligne pour ajouter 45 minutes ;p
C'est là que ça se corse ;-((
il faudrait faire intervenir des variables qui récupéreraient "M+45" et "M-45" pour pondre une expression régulière qui intégrerait l'intervalle de recherche, mais bon ça je sais même pas si c'est faisable ;-))
sed '/'$(date "+%d:%m:%y\"#%H:%M" --date="-45 minutes")'/!d fichier2>fichier3
Donc tout va bien, pas d'erreur, mais mon fichier est vide, il ne me sort rien pour 15h15 précise, ni pour la tranche horaire de 15h15 a 16h00
Est-ce qu'au moins une ligne du fichier d'entrée comprend une date et une heure correspondant à 15h15 ???
Je continue de chercher ;)
Bon courage ;-))
Ça je t'avais prévenu ;-))
aprés plusieurs tests une question me vient à l'ésprit :
Si mon horloge affiche 16h00, et que je lui retranche -45 minutes
date "+%d/%m/%y\"#%H:%M" --date="-45 minutes"
Est ce qu'il va prendre en compte la tranche horaire de 15h15 à 16h, ou bien est ce qu'il comprend qu'il doit chercher 15h15 pile ? Car si il cherche 15h15 c'est la cata :)
Ben non il ne prendra pas l'intervalle, mais l'heure avec les 45 minutes soustraites :
$ date "+%d:%m:%y-%H:%M" 19:08:07-17:58 $ date "+%d:%m:%y-%H:%M" --date="-45 minutes" 19:08:07-17:13 $
Pour simplifier je commence par changer mes "/", sinon je n'y arrive pas :
sed 's|/|:|' fichier1>fichier2
Ben c'est pas nécessaire, suffit de composer toutes tes commandes "sed" avec des pipes ( | ) à la place des slashs ( / ), puis à garder ta ligne, rajoute le "g" final pour global, dans tes dates dans ton fichier il y a 2 slashs, ta syntaxe actuelle ne remplace que le 1er... donc :
sed 's|/|:|g' fichier1>fichier2
Ensuite je reprend mon fichier 2 et je fais ma comparaison avec la date en retranchant 45 minutes pour le moment car je ne sais pas encore comment integrer la ligne pour ajouter 45 minutes ;p
C'est là que ça se corse ;-((
il faudrait faire intervenir des variables qui récupéreraient "M+45" et "M-45" pour pondre une expression régulière qui intégrerait l'intervalle de recherche, mais bon ça je sais même pas si c'est faisable ;-))
sed '/'$(date "+%d:%m:%y\"#%H:%M" --date="-45 minutes")'/!d fichier2>fichier3
Donc tout va bien, pas d'erreur, mais mon fichier est vide, il ne me sort rien pour 15h15 précise, ni pour la tranche horaire de 15h15 a 16h00
Est-ce qu'au moins une ligne du fichier d'entrée comprend une date et une heure correspondant à 15h15 ???
Je continue de chercher ;)
Bon courage ;-))
Ok je n'avais pas compris que les pipes pouvaient remplacer les slashs :)
Le g je ne l'ai pas écrit mais il est présent dans ma ligne. La ou ça va bloquer c'est justement la tranche horaire, car j'en ai vraiment besoin, en fait si dans mon fichier il est affiché 16h00, je dois pouvoir l'avoir dans mon fichier de sortie 45 minutes avant 16h00, et encore 45 minutes aprés 16h00, donc si tu me dis que ce n'est pas faisable, je vais me diriger vers autre chose, mais je ne vois pas encore quoi ;(
Sinon oui j'ai modifié mon fichier pour qu'il y est 15:15 dedans, mais il ne le voit pas, je vais me pencher la dessus, et je tenterai de completer avec autre chose ou de trouver une solution intermédiaire pour la tranche horaire.
Encore merci à toi, et chapeau bas pour tes connaissances sur Sed.
Le g je ne l'ai pas écrit mais il est présent dans ma ligne. La ou ça va bloquer c'est justement la tranche horaire, car j'en ai vraiment besoin, en fait si dans mon fichier il est affiché 16h00, je dois pouvoir l'avoir dans mon fichier de sortie 45 minutes avant 16h00, et encore 45 minutes aprés 16h00, donc si tu me dis que ce n'est pas faisable, je vais me diriger vers autre chose, mais je ne vois pas encore quoi ;(
Sinon oui j'ai modifié mon fichier pour qu'il y est 15:15 dedans, mais il ne le voit pas, je vais me pencher la dessus, et je tenterai de completer avec autre chose ou de trouver une solution intermédiaire pour la tranche horaire.
Encore merci à toi, et chapeau bas pour tes connaissances sur Sed.
Encore moi !
Alors voila, j'essaie d'inclure la commande expr que je viens de découvrir, et bien évidemment ça ne fonctionne pas, sauf quand je test tout bettement $ expr 3 + 2
La pas de souçis j'ai bien 5 qui s'affiche sur la sortie standard, aprés plusieurs essais j'avais dans mon fichier de sortie ce symbole ਵ.
Et la je viens donc de tester en dehors de mon script: $ expr 2 + 3 >fichier.txt
Et hop je me retrouve avec un Fichier.txt qui contient comme resultat, devinez quoi ? ਵ
Mais qu'est ce donc ? C'est une imcompatibilité Cygwin/Windows ? Ce symbole est en fait le chiffre 5 ?
J'ai tenté de ré-enregistrer mon txt en utilisant le code UTF-8 mais rien n'y fait :/
Alors voila, j'essaie d'inclure la commande expr que je viens de découvrir, et bien évidemment ça ne fonctionne pas, sauf quand je test tout bettement $ expr 3 + 2
La pas de souçis j'ai bien 5 qui s'affiche sur la sortie standard, aprés plusieurs essais j'avais dans mon fichier de sortie ce symbole ਵ.
Et la je viens donc de tester en dehors de mon script: $ expr 2 + 3 >fichier.txt
Et hop je me retrouve avec un Fichier.txt qui contient comme resultat, devinez quoi ? ਵ
Mais qu'est ce donc ? C'est une imcompatibilité Cygwin/Windows ? Ce symbole est en fait le chiffre 5 ?
J'ai tenté de ré-enregistrer mon txt en utilisant le code UTF-8 mais rien n'y fait :/
16 août 2007 à 21:15
Mon fichier texte ressemble à cela
#1#"15/08/2007"#"14:30"#1#358#31
#1#"15/08/2007"#"15:27"#1#358#31
#1#"15/08/2007"#"16:48"#1#358#31
#1#"15/08/2007"#"18:14"#1#358#31
etc etc..
je le modifie avec cette commande : sed -e 's/#/\&=/g' -e 's/"//g'
Ce qui à pour effet de me supprimer les " et de me remplacer les # par &=
Quand j'ajoute la ligne que tu viens de me donner Jipicy, donc :
$ sed '/'$(date "+%H:%M")'/d' fichier.txt -e 's/#/\&=/g' -e 's/"//g' fichier.t
xt>fichier2.txt
Il me dit en erreur : Can't read 21:20/d: no such file or directory
La bonne nouvelle c'est que deja cela fonctionne, il prend en compte mon horloge ! :D
La mauvaise ... vois bien que ça cloche mais je ne vois pas ou ...
A quoi donc sert le d' dans ta ligne ? je ne trouve pas :(
Merci de ton aide