Mystere avec grep

Le
Hugolino
[Supersedes]

Bonjour,

Je fais encore appel à la qualité des contributeurs du ng pour tirer au
clair une bizarrerie de grep (bash/linux)

J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".
Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai
aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier

Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50
occurences). Pas grave.

Par contre, j'ai encore un fichier qui matche:
8<--8<8<-8<-8<-8<-8<
JPFixeMount~-22-
JPFixeMount~:23:echo -e ${GREEN} "Type in the ${YELLOW}$TheOuinOuin <cut>
JPFixeMount~-24-read Reponse
8<--8<8<-8<-8<-8<-8<

Et la ligne 23 du script JPFixeMount est:
8<--8<8<-8<-8<-8<-8<
echo -n ${GREEN} "Type in the ${YELLOW}$TheOuinOuinBordel${GREEN} <cut>
8<--8<8<-8<-8<-8<-8<

Encore plus bizarre, si j'édite le script et que je supprime la ligne 22
qui était vide, alors le grep ne matche plus (ne provoque plus d'erreur).

Qu'y avait-il dans mion fichier qui "trompait" grep ?
On ne voyait rien sous vim.


Je me demande si le problème n'est pas du au fait que je mets de la
couleur dans mes scripts. Il commencent tous par:
8<--8<8<-8<-8<-8<-8<
#!/bin/sh
# The doc is http://people.via.ecp.fr/~alexis/formation-linux/samba.html
TheOuinOuinBordel="Fixe"

NORMAL="^[[0;39m"
RED="^[[1;31m"
GREEN="^[[1;32m"
YELLOW="^[[1;33m"
BLUE="^[[1;34m"
MAGENTA="^[[1;35m"
CYAN="^[[1;36m"
WHITE="^[[1;37m"
8<--8<8<-8<-8<-8<-8<

Et j'utilise les variables ${GREEN} ${YELLOW}, etc pour colorier la
sortie sur l'écran.


Merci de vos éclaircissements.


PS: mes scripts sont là : <http://www.roulaize.fr/scripts_bash/>

--
<HTML> <P><BR>peut-on acceder avec xterm sous windows &agrave; linux
en tant qu'utilisateur root, ou avec un utilisateur diff&eacute;rent
qui a les m&ecirc;mes droits
-+- FML in Guide du linuxien pervers : "Bien configurer son article"
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #736986
Bonjour,

le 16/05/2007 à 21:15, Hugolino message
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".
Pour vérifier que tout s'est bien passé j'ai fait des diffs, mais j'ai
aussi lancé la commande 'grep -C 1 -n -e "echo -e" *', pour vérifier...

Là je me suis aperçu que je n'avais pas pensé au "echo -en" (50
occurences). Pas grave.


Tu n'as pas pensé non plus au « echo -ne » ou « echo -n -e ». Je me suis
permis un wget -r sur ton répertoire, j'en compte 1859 (je compte aussi
les lignes commentés) :

#!/usr/bin/perl
use warnings;
use strict;

for my $file (<scripts_bash/*>) {
open(my $fh, $file) or die "can't open $file: $!";
while (<$fh>) {
if (/bechos+(-.*$)/) {
if ($1 =~ /^(-[En]*\?e?s+)*-[En]*\?e/) {
print "$file:$.: $_";
}
}
}
close $fh;
}
__END__

C'est loin d'être parfait car par exemple « $echo -e » va être affiché
et ça ne traite pas toutes les possibilités : « echo -e » sans rien
derrière ne sera pas affiché.

Note que POSIX ne défini pas d'argument pour echo donc « -n » n'est pas
portable.

--
Benoit Izac

Pascal Bourguignon
Le #736985
Hugolino
J'ai mis tous mes scripts bash dans un répertoire pour leur passer un
coup de sed, parce que j'avais 1591 occurences de "echo -e "à remplacer
par "echo ".


Ce serait meilleur de les remplacer par printf(1).


Qu'y avait-il dans mion fichier qui "trompait" grep ?
On ne voyait rien sous vim.


Essayer avec od(1) sur l'ancien fichier; il y a peut être un ^H...


--
__Pascal Bourguignon__ http://www.informatimago.com/

NOTE: The most fundamental particles in this product are held
together by a "gluing" force about which little is currently known
and whose adhesive power can therefore not be permanently
guaranteed.

Publicité
Poster une réponse
Anonyme