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 06/06/2014, à 15:42

Le Goss

[Résolu] bash: grep garder les mots entiers

Bonjour à tous,

J'ai une commande avec du grep

grep -i --color=always etc....

Il me coupe les mots en fin de ligne quand ils sont trop longs.

Y a-t-il un remède? je veux dire à part la colle forte? tongue

Merci pour votre aide,
Cordialement

Dernière modification par Le Goss (Le 07/06/2014, à 11:31)


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#2 Le 06/06/2014, à 20:45

tiramiseb

Re : [Résolu] bash: grep garder les mots entiers

Salut,

grep lui-même ne coupe pas les mots en fin de ligne...

Peux-tu donner plus de détails sur ton problème ? Commande exécutée, résultat obtenu, etc...

Hors ligne

#3 Le 06/06/2014, à 22:04

Zakhar

Re : [Résolu] bash: grep garder les mots entiers

Je confirme ce que dit tiramiseb.

Ou alors tu es victime d'une "illusion d'optique", tu crois que c'est un mot long et en fait il y a un retour chariot qui le coupe, ou dans l'autre sens, grep trouve bien le mot long, mais comme le terminal wrappe les lignes, ça "déborde" sur la ligne du dessous !

Un conseil quand tu n'es pas sûr qu'il n'y ait pas de caractères "invisibles" en entrée comme en sortie, tu peux "piper" entrée/sortie sur hd qui te permettra de voir exactement de quoi il s'agit.


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#4 Le 07/06/2014, à 07:30

Le Goss

Re : [Résolu] bash: grep garder les mots entiers

Bonjour,

tiramiseb a écrit :

Peux-tu donner plus de détails sur ton problème ? Commande exécutée, résultat obtenu, etc...

La commande complète

w3m -cols 500 -dump http://fr.wikipedia.org/wiki/Napol%C3%A9on_Ier | egrep -i --color=always "napoléon"

Le problème obtenu est décrit plus haut... et c'est pas une illusion d'optique! lol


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#5 Le 07/06/2014, à 07:33

tiramiseb

Re : [Résolu] bash: grep garder les mots entiers

J'ai exécuté ta commande, je ne vois pas où grep coupe les mots en fin de ligne...
Peux-tu donner plus de détails  Où vois-tu une coupure de mot ?

Hors ligne

#6 Le 07/06/2014, à 07:48

Le Goss

Re : [Résolu] bash: grep garder les mots entiers

25. Napoléon Joseph Charles Paul Bonaparte (1822-1891), fils de Jérôme ;
Deux neveux moururent du vivant de Napoléon (Dermid Leclerc et Napoléon Charles Bonaparte, ce dernier ayant été considéré comme héritier présomptif de la couronne impériale entre 1804 et 1807 selon la constitution), et deux naquirent après son décès.

Pour "après son décès", "après" est coupé en "apr" et "ès" à la ligne suivante

91. ↑ Les enfants de Lucien, nés de son deuxième mariage, ont été reconnus princes français en 1815 par Napoléon lors de sa réconciliation avec leur père et apparaissent donc dans la liste, bien qu'ils n'entrent pas dans la succession. En revanche, le fils de Jérôme né de son mariage américain, dissout pour illégalité (minorité du marié, absence d'autorisation du parent tuteur), n'apparaît pas.

Pour "En revanche", "En" est coupé en deux
etc.
Et encore ça, c'est avec une fenêtre maximisée! Sur une fenêtre réduite, des coupures comme ça, il y en a en pagaille!


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#7 Le 07/06/2014, à 08:13

Zakhar

Re : [Résolu] bash: grep garder les mots entiers

C'est bien une "illusion d'optique" à ce que je comprends que tu "reproches" à ce que tu obtiens dépendant de la fenêtre du terminal.

Relis mon message.

Démo :

$ egrep -i --color=always "napoléon" test
Terminal a écrit :

25. Napoléon Joseph Charles Paul Bonaparte (1822-1891), fils de Jérôme ;
Deux neveux moururent du vivant de Napoléon (Dermid Leclerc et Napoléon Charles
Bonaparte, ce dernier ayant été considéré comme héritier présomptif de la cour
onne impériale entre 1804 et 1807 selon la constitution), et deux naquirent apr
ès son décès.

C'est ainsi que cela apparaît sur un terminal standard à 80 colonnes, car comme je l'explique plus haut, le terminal "wrappe" les lignes qui dépassent la largeur affichable.
Ainsi, dans l'exemple, "couronne" et "après" apparaissent "coupés"... mais en réalité ils ne le sont pas, c'est juste le wrapping qui produit cette "illusion d'optique".

Si tu veux vérifier s'il y a ou pas des retours chariots dans la sortie, tu pipe sur hd, comme ça :

$ egrep -i --color=always "napoléon" test | hd
00000000  32 35 2e 20 1b 5b 30 31  3b 33 31 6d 1b 5b 4b 4e  |25. .[01;31m.[KN|
00000010  61 70 6f 6c c3 a9 6f 6e  1b 5b 6d 1b 5b 4b 20 4a  |apol..on.[m.[K J|
00000020  6f 73 65 70 68 20 43 68  61 72 6c 65 73 20 50 61  |oseph Charles Pa|
00000030  75 6c 20 42 6f 6e 61 70  61 72 74 65 20 28 31 38  |ul Bonaparte (18|
00000040  32 32 2d 31 38 39 31 29  2c 20 66 69 6c 73 20 64  |22-1891), fils d|
00000050  65 20 4a c3 a9 72 c3 b4  6d 65 20 3b 0a 44 65 75  |e J..r..me ;.Deu|
00000060  78 20 6e 65 76 65 75 78  20 6d 6f 75 72 75 72 65  |x neveux mourure|
00000070  6e 74 20 64 75 20 76 69  76 61 6e 74 20 64 65 20  |nt du vivant de |
00000080  1b 5b 30 31 3b 33 31 6d  1b 5b 4b 4e 61 70 6f 6c  |.[01;31m.[KNapol|
00000090  c3 a9 6f 6e 1b 5b 6d 1b  5b 4b 20 28 44 65 72 6d  |..on.[m.[K (Derm|
000000a0  69 64 20 4c 65 63 6c 65  72 63 20 65 74 20 1b 5b  |id Leclerc et .[|
000000b0  30 31 3b 33 31 6d 1b 5b  4b 4e 61 70 6f 6c c3 a9  |01;31m.[KNapol..|
000000c0  6f 6e 1b 5b 6d 1b 5b 4b  20 43 68 61 72 6c 65 73  |on.[m.[K Charles|
000000d0  20 42 6f 6e 61 70 61 72  74 65 2c 20 63 65 20 64  | Bonaparte, ce d|
000000e0  65 72 6e 69 65 72 20 61  79 61 6e 74 20 c3 a9 74  |ernier ayant ..t|
000000f0  c3 a9 20 63 6f 6e 73 69  64 c3 a9 72 c3 a9 20 63  |.. consid..r.. c|
00000100  6f 6d 6d 65 20 68 c3 a9  72 69 74 69 65 72 20 70  |omme h..ritier p|
00000110  72 c3 a9 73 6f 6d 70 74  69 66 20 64 65 20 6c 61  |r..somptif de la|
00000120  20 63 6f 75 72 6f 6e 6e  65 20 69 6d 70 c3 a9 72  | couronne imp..r|
00000130  69 61 6c 65 20 65 6e 74  72 65 20 31 38 30 34 20  |iale entre 1804 |
00000140  65 74 20 31 38 30 37 20  73 65 6c 6f 6e 20 6c 61  |et 1807 selon la|
00000150  20 63 6f 6e 73 74 69 74  75 74 69 6f 6e 29 2c 20  | constitution), |
00000160  65 74 20 64 65 75 78 20  6e 61 71 75 69 72 65 6e  |et deux naquiren|
00000170  74 20 61 70 72 c3 a8 73  20 73 6f 6e 20 64 c3 a9  |t apr..s son d..|
00000180  63 c3 a8 73 2e 0a                                 |c..s..|
00000186

Tu peux alors constater qu'il n'y a pas de retour à la ligne entre "cour" et "ronne" qui apparaissent pourtant "coupés" (wrapping) ni entre "apr" et "ès".

Dernière modification par Zakhar (Le 07/06/2014, à 08:15)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#8 Le 07/06/2014, à 08:20

tiramiseb

Re : [Résolu] bash: grep garder les mots entiers

Ok, donc il ne s'agit pas de grep qui coupe les mots.
C'est ton terminal qui te montre une ligne sur plusieurs lignes. La sortie de grep contient bien les lignes entières.

D'ailleurs ça ressort sur ton copier-coller : les lignes que tu montres sont bien complètes sur le forum...

Hors ligne

#9 Le 07/06/2014, à 08:20

Le Goss

Re : [Résolu] bash: grep garder les mots entiers

Je comprends mieux l'expression "illusion d'optique": le terminal m'a abusé.
Comment faire alors pour que le le terminal ne "wrappe" pas les lignes qui dépassent la largeur affichable?


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#10 Le 07/06/2014, à 08:34

tiramiseb

Re : [Résolu] bash: grep garder les mots entiers

http://google.fr/?q=terminal+no+wrap
pas sûr que ce soit vraiment possible.

Mais c'est quoi ton besoin, à la base ?

Hors ligne

#11 Le 07/06/2014, à 08:41

Le Goss

Re : [Résolu] bash: grep garder les mots entiers

Mon besoin est tout simple: un confort de lecture. wink
Et il m'arrive très fréquemment de lire le résultat de commande comme celle que je prend en exemple.


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#12 Le 07/06/2014, à 08:52

Zakhar

Re : [Résolu] bash: grep garder les mots entiers

Comme je te dis, tu as alors 2 solutions standard :

- le hd pour vérifier les caractères "invisibles" (mais du coup ce n'est pas trop pratique à lire)
- la redirection vers un fichier qui tu ouvres ensuite avec un éditeur de ton choix, quasiment tous les éditeurs ont une fonction "no-wrap" (par défaut sur gedit par exemple)... même nano !

Dernière modification par Zakhar (Le 07/06/2014, à 08:52)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#13 Le 07/06/2014, à 09:20

credenhill

Re : [Résolu] bash: grep garder les mots entiers

hello
une méthode

commande | cut -c 1-$COLUMNS

Hors ligne

#14 Le 07/06/2014, à 09:32

melixgaro

Re : [Résolu] bash: grep garder les mots entiers

salut,

Pourriez-vous dire « replier les lignes » au lieu de cet horrible « wrap les lignes » svp ?

sinon pour le problème de Le Goss, je propose de chaîner la sortie de sa commande à less comme ceci

commande qui sort un truc vraiment vraiment long | less -SR

Les lignes longues seront virtuellement coupées, contrairement à la commande de credenhill qui fait disparaître tout ce qu'il y a au-delà de la colonne $COLUMNS

Pour la lecture avec less : touches gauche / droite, pour se déplacer horizontalement dans le texte et touches haut/bas, pour se déplacer verticalement.

Dernière modification par melixgaro (Le 07/06/2014, à 09:32)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#15 Le 07/06/2014, à 10:54

Le Goss

Re : [Résolu] bash: grep garder les mots entiers

melixgaro a écrit :
 | less -SR

Je vais prendre cette commande qui correspond d'avantage à mon problème actuel.

credenhill a écrit :
 | cut -c 1-$COLUMNS

Je garde aussi cette commande qui me sera utile prochainement.

Merci à tous pour vos propositions!
Problème résolu.


Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags

Hors ligne

#16 Le 07/06/2014, à 12:49

tiramiseb

Re : [Résolu] bash: grep garder les mots entiers

Très bonne idée, la commande "less" smile

Juste une remarque, melixgaro, pour moi "replier" n'est pas synonyme de l'horrible anglicisme "wrap". Dans un éditeur de type IDE, "replier" ça permet de cacher des lignes (toutes les lignes d'une fonction par exemple). Cela dit, si tu me retrouves un bon équivalent français, je serais heureux de l'utiliser. Mais pour moi, "replier" n'a pas la même signification smile

Hors ligne

#17 Le 07/06/2014, à 13:22

melixgaro

Re : [Résolu] bash: grep garder les mots entiers

à tiramiseb

voui, je sais qu'il est toujours délicat de trouver des traductions adaptées. J'avais pensé à « tronquer », mais ça convient mieux lorsque la coupe se fait n'importe où, y compris au milieu d'un mot (comme avec la commande cut proposée qui tronque la ligne). « replier » convient bien, je trouve : ça correspond une peu à ce qui se passe graphiquement : la ligne « de texte » est pliée sur plusieurs lignes « typographiques ». Enfin, je n'ai pas mieux pour l'instant. En tout cas, il n'y a pas de conflit avec l'utilisation de plier/replier dans le cadre d'un éditeur pour programmation. Les mots peuvent avoir plusieurs sens, en général le contexte permet de trancher.


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#18 Le 07/06/2014, à 13:27

melixgaro

Re : [Résolu] bash: grep garder les mots entiers

pour compléter l'option S de la commande less s'occupe de garder l'intégrité des lignes et l'option R s'occupe de prendre en charge certains caractères (genre si la commande d'avant colorise sa sortie, les couleurs seront conservées à travers less ou des fois certains accents codés bizarrement...)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne