Re: [HS] sed : garder le motif
On Wed, Jan 28, 2009 at 08:55:48AM +0100, steve wrote: sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux temps : - editer le fichier disons fich.txt avec vi et supprimer tout ce qui dépasse le troisième caractère (Ctrl-V). - grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt Je ne comprends la seconde étape (ni la première d'ailleurs, il faut le faire manuellement ?) si la première fait le travail. Je détaille : - éditer le fichier avec vi et sélectionner en mode colonne tout ce qui dépasse le troisième caractère en utilisant la commande Ctrl-V ; il faudra éventuellement allonger la dernière ligne de manière à pouvoir tout sélectionner d'un seul coup. Supprimer avec la commande d puis sauvegarder. Si le ficher d'origine était : ABCqsd DEFqsdf qsddfqqsd XYZ FGHqdfq tXY il devient : ABC DEF qsd XYZ FGH tXY Reste à éliminer les lignes contenant des minuscules: grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt et on récupère le résultat dans fichmodif.txt. ABC DEF XYZ FGH C'est bien cela que tu voulais ? Naturellement, à la place de vi, on peut utiliser un autre éditeur de textes qui accepte les sélections en colonne. A+ -- Pierre Meurisse -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Allez, à mon tour ;) 2009/1/27 steve dl...@bluewin.ch: Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... on peut mixer les solutions de Gilles et de Pierre : grep -E ^[A-Z][A-Z][A-Z] fich.txt | cut -c 1-3 fichmodif.txt jluc -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux temps : - editer le fichier disons fich.txt avec vi et supprimer tout ce qui dépasse le troisième caractère (Ctrl-V). - grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt Je ne comprends la seconde étape (ni la première d'ailleurs, il faut le faire manuellement ?) si la première fait le travail. Je détaille : merci. - éditer le fichier avec vi et sélectionner en mode colonne tout ce qui dépasse le troisième caractère en utilisant la commande Ctrl-V ; Je ne connaissais pas cette sélection en mode bloc, je vois mieux maintenant de quoi il s'agit. Pour info, c'est bien v majuscule. il faudra éventuellement allonger la dernière ligne de manière à pouvoir tout sélectionner d'un seul coup. Supprimer avec la commande d puis sauvegarder. ok, c'est effectivement assez simple ainsi. Si le ficher d'origine était : ABCqsd DEFqsdf qsddfqqsd XYZ FGHqdfq tXY il devient : ABC DEF qsd XYZ FGH tXY ok. Reste à éliminer les lignes contenant des minuscules: C'est cette seconde phase que je n'avais pas compris et pour cause, les trois premières lettres sont toujours en majuscules. grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt ok. et on récupère le résultat dans fichmodif.txt. ABC DEF XYZ FGH C'est bien cela que tu voulais ? Absolument, merci d'ailleurs. Naturellement, à la place de vi, on peut utiliser un autre éditeur de textes qui accepte les sélections en colonne. Ou encore éditer le fichier dans un tableur est utilisé une fonction substr(), mais je ne voulais pas le faire comme ça, je voulais utiliser sed. Merci pour ton explication. Excellente journée, Steve -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Merci pour ton explication. De rien. Cela m'a permis de découvrir cut, que je n'ai pas l'habitude d'utiliser. Il faut dire que le man de cut n'est pas des plus clairs : -c, --characters=LIST select only these characters La solution de Jean-Luc est nettement meilleure : grep -E ^[A-Z][A-Z][A-Z] fich.txt | cut -c 1-3 fichmodif.txt Merci à lui. Excellente journée. -- Pierre Meurisse -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
2009/1/28 steve dl...@bluewin.ch: c'est quand même plus long que les solutions basées sur sed, j'ai encore du mal avec sed, mais promis, je vais m'y mettre ;) Merci à lui. Oui merci Jean-Luc ! de rien, après tout, je me suis contenté de reprendre des solutions déjà dnnées... jluc -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Merci pour ton explication. De rien. Cela m'a permis de découvrir cut, que je n'ai pas l'habitude d'utiliser. Il faut dire que le man de cut n'est pas des plus clairs : J'avais aussi pensé à cut mais comme toi j'ai trouvé le man pour le moins lacunaire, ce qui m'a finalement orienté vers sed. -c, --characters=LIST select only these characters La solution de Jean-Luc est nettement meilleure : grep -E ^[A-Z][A-Z][A-Z] fich.txt | cut -c 1-3 fichmodif.txt c'est quand même plus long que les solutions basées sur sed, m'enfin on s'en tape de savoir qui a la plus courte hein ;-) Merci à lui. Oui merci Jean-Luc ! -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
c'est quand même plus long que les solutions basées sur sed, j'ai encore du mal avec sed, mais promis, je vais m'y mettre ;) Moi aussi je me dis ça à chaque fois que j'en ai besoin ; malheureusement c'est très rare ce qui fait que j'oublie les 3/4 de ce que j'avais appris.. Merci à lui. Oui merci Jean-Luc ! de rien, après tout, je me suis contenté de reprendre des solutions déjà dnnées... C'est vrai ça, tu n'es qu'un chapardeur de solutions ;-) -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
steve a écrit, mercredi 28 janvier 2009, à 11:24 : [...] grep -E ^[A-Z][A-Z][A-Z] fich.txt | cut -c 1-3 fichmodif.txt c'est quand même plus long que les solutions basées sur sed, m'enfin on s'en tape de savoir qui a la plus courte hein ;-) sed -nre '# quand la ligne commence bien, /^[A-Z]{3}/{ # on insère une césure si besoin s/./\n/4 # et on écrit seulement la première partie P }' Avec Awk, c'est peut-être plus lisible : awk -F '' '/^[A-Z][A-Z][A-Z]/{print $1$2$3}' Sed fournit la solution la plus légère, et qui marche même avant le montage d'un /usr. 32K /usr/bin/cut 56K /bin/sed 104K/bin/grep 116K/usr/bin/mawk 336K/usr/bin/gawk -- Jacques L'helgoualc'h -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
[HS] sed : garder le motif
Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? Merci d'avance, Steve -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Le 27 janvier 2009 15:26, steve dl...@bluewin.ch a écrit : Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? sed -e 's/^\([A-Z][A-Z][A-Z]\).*/\1/' input_file et encore mieux : sed -e 's/^\([A-Z]\{3\}\).*/\1/' input_file :) -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Bonjour, steve a écrit : J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? a priori awk ou perl aussi mais let's try with sed J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? La formule que j'écrirais est plutôt de la forme : sed -e 's/^\(...\).*$/\1/' input_file Les 3 premiers '.' (n'importe quel caractère) peuvent être remplacés chacun par un [A-Z] si besoin (n'importe quelle lettre de A à Z). Le dernier '.' suivi de '*' correspondent à n'importe quelle suite de caractères jusqu'à la fin. Les parenthèses sont là pour grouper les 3 premiers caractères. On les réécrit avec le \1. Testé approuvé ;-) Yannick. -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
steve a écrit : Bonjour et pardon pour ce HS. Tu peux essayer la liste shellscript pour ça ;-) (http://debianworld.org/shellscript-fr) J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? Oui. Pour ajouter à ce qu'on dit les autres, on peut utiliser l'option -r pour avoir les regex étendue et ne plus avoir besoin d'échapper les () et {}. Ensuite, si tu veux ne pas afficher les lignes qui ne correspondent pas au pattern $ echo 'ABCbla bla DEFblabla GhIblabla'|sed -rne 's/^([A-Z]{3}).*$/\1/p' ABC DEF le -n, c'est pour ne pas afficher les lignes par défaut, d'où le besoin de préciser le p à la fin de l'expression (on décide un print explicite). Si tu veux la ligne qui ne correspond pas au pattern, c'est $ echo 'ABCbla bla DEFblabla GhIblabla'|sed -re 's/^([A-Z]{3}).*$/\1/' ABC DEF GhIblabla -- Daniel -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Salut et merci pour vos réponses. steve a écrit : Bonjour et pardon pour ce HS. Tu peux essayer la liste shellscript pour ça ;-) (http://debianworld.org/shellscript-fr) Oui, et en plus j'y suis inscrit ... J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? Oui. Pour ajouter à ce qu'on dit les autres, on peut utiliser l'option -r pour avoir les regex étendue et ne plus avoir besoin d'échapper les () et {}. Ensuite, si tu veux ne pas afficher les lignes qui ne correspondent pas au pattern $ echo 'ABCbla bla DEFblabla GhIblabla'|sed -rne 's/^([A-Z]{3}).*$/\1/p' ABC DEF Chez moi, rien ne s'affiche : $ cat file.csv | sed -rne 's/^([A-Z]{3}).*$/\1/' $ et pourtant le fichier commence par ABC(ABCYMO) BAR(BARDO) le -n, c'est pour ne pas afficher les lignes par défaut, d'où le besoin de préciser le p à la fin de l'expression (on décide un print explicite). Si tu veux la ligne qui ne correspond pas au pattern, c'est $ echo 'ABCbla bla DEFblabla GhIblabla'|sed -re 's/^([A-Z]{3}).*$/\1/' ABC DEF GhIblabla Par contre sans le n le résultat attendu s'affiche. Merci. -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
On Tue, Jan 27, 2009 at 03:26:03PM +0100, steve wrote: Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. J'ai vu le autres propositions en sed, mais il y a une commande bien plus simple pour ça : cut. gil...@eeepc:~$ cat essai ABCtruc DEFchose AZE ERZrg gil...@eeepc:~$ cut -c 1-3 essai ABC DEF AZE ERZ signature.asc Description: Digital signature
Re: [HS] sed : garder le motif
2009/1/27 Gilles Mocellin gilles.mocel...@free.fr: J'ai vu le autres propositions en sed, mais il y a une commande bien plus simple pour ça : cut. gil...@eeepc:~$ cut -c 1-3 essai ABC DEF AZE Troll Tu ne respectes pas sa demande qui était de garder seulement les 3 premiers caractères dans les lignes commençant par trois lettres majuscule entre A et Z. :) /Troll -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
Le Tuesday 27 January 2009 23:21:12 Kevin Hinault, vous avez écrit : 2009/1/27 Gilles Mocellin gilles.mocel...@free.fr: J'ai vu le autres propositions en sed, mais il y a une commande bien plus simple pour ça : cut. gil...@eeepc:~$ cut -c 1-3 essai ABC DEF AZE Troll Tu ne respectes pas sa demande qui était de garder seulement les 3 premiers caractères dans les lignes commençant par trois lettres majuscule entre A et Z. :) Mais euh ! M'aurais-je gouré ? Je re-cite : Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... /Troll signature.asc Description: This is a digitally signed message part.
Re: [HS] sed : garder le motif
Le 28 janvier 2009 00:26, Gilles Mocellin gilles.mocel...@free.fr a écrit : Mais euh ! M'aurais-je gouré ? Je re-cite : Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... /Troll Troll En effet, il y a un doute possible ! Si on ne lit que le début, on pense en effet que l'auteur désire les 3 premiers caractères quelconques. Si on lit la suite : J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file Ce qui prête à croire qu'il désirait seulement des [A-Z]. Promis... demain j'arrête les trolls. /Troll -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
On Tue, Jan 27, 2009 at 03:26:03PM +0100, steve wrote: Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... Sed devrait faire l'affaire non ? J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux temps : - editer le fichier disons fich.txt avec vi et supprimer tout ce qui dépasse le troisième caractère (Ctrl-V). - grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt A+ -- Pierre Meurisse -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
M'aurais-je gouré ? Je re-cite : Bonjour et pardon pour ce HS. J'ai un long fichier de la forme ABC(du texte) MSD(un autre texte) etc... J'aimerai traiter ce fichier de tel manière qu'à la sortie je n'ai que les 3 premiers caractères : ABC MSD etc... /Troll Troll En effet, il y a un doute possible ! Si on ne lit que le début, on pense en effet que l'auteur désire les 3 premiers caractères quelconques. Si on lit la suite : J'ai essayé (entre autres) sed -e 's/^[A-Z][A-Z][A-Z]//' input_file Ce qui prête à croire qu'il désirait seulement des [A-Z]. Ce que l'auteur confirme ;-) Promis... demain j'arrête les trolls. Accepté si ça recommence vendredi ! /Troll -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Re: [HS] sed : garder le motif
sed -e 's/^[A-Z][A-Z][A-Z]//' input_file et ça me sort (fort logiquement d'ailleurs) les caractères de rang 4 et plus, donc exactement le contraire de ce que je veux. Comment lui dire de ne m'afficher *que* le motif cherché ? S'il s'agit bien d'un seul fichier, il y a une méthode simple en deux temps : - editer le fichier disons fich.txt avec vi et supprimer tout ce qui dépasse le troisième caractère (Ctrl-V). - grep -E [A-Z][A-Z][A-Z] fich.txt fichmodif.txt Je ne comprends la seconde étape (ni la première d'ailleurs, il faut le faire manuellement ?) si la première fait le travail. -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.org/DebFrFrenchLists Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to debian-user-french-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org