Sed et l'horloge en référence ?
Résolu
neo
-
neo -
neo -
A voir également:
- Sed et l'horloge en référence ?
- Horloge en ligne aesthetic - Télécharger - Thèmes & Fonds d'écran
- Horloge mondiale gratuite - Télécharger - Outils professionnels
- Appli horloge - Télécharger - Guide Android
- Reference pto - Accueil - Box & Connexion Internet
- Widget météo et horloge - Télécharger - Divers Utilitaires
7 réponses
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.
;-))
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
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 :/
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