cher journal...
(1) Je voudrais rechercher une chaînes de caractère dans les fichiers d'un répertoire et récupérer le nom des fichier contenant cette chaîne, pour pouvoir aller ensuite les voir de plus près.
Je voudrais aussi pouvoir faire la même chose, mais en rechercher remplacer...
Quelles commandes ou script utiliser ? (y a trop longtemps que je n'ais pas écris de script shell).
(2) moins important : j'ai un vieux pc qui me sert de serveur : pas de clavier pas de souris, pas d'écran. On viens de me donner un vieux palm m100 : est-ce que quelqu'un à déjà essayé de s'en servir comme terminal ? (une petite doc serait la bienvenue).
Voilà, merci !
# Re: 2 problèmes pour le prix d'un...
Posté par Wawet76 . Évalué à 1.
# Re: 2 problèmes pour le prix d'un...
Posté par Ano nyme (site web personnel) . Évalué à 1.
2 / j'ai essayé avec un psion et ça marche niquel, donc avec un palm y a pas de raison (surtout avec un câble série)
# Re: 2 problèmes pour le prix d'un...
Posté par alt3 (site web personnel) . Évalué à 1.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par lom (site web personnel) . Évalué à 1.
Et a priori c'est ce qui est demandé.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par JMVF . Évalué à 1.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par Florent MANENS . Évalué à 1.
man grep :
-H, --with-filename
Print the filename for each match.
grep -H machaine *
# Re: 2 problèmes pour le prix d'un...
Posté par lom (site web personnel) . Évalué à 4.
cd repertoire; grep -l "chaine" *
1b:
cd repertoire; perl -pi -e "s/chaine_a_chercher/remplacement/" *
pour une recherche sur une arborescence, ça donne plutôt:
find . -name "plop*" -print0 | xargs -0 grep -l "chaine"
et
find . -name "plop*" -print0 | xargs -0 perl -pi -e "s/chaine_a_chercher/remplacement/" *
Je ne pense pas avoir dit trop de bêtises...
2:
joker.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par B r u n o (site web personnel) . Évalué à 1.
Ca donnerait un truc du genre grep -lr "chaine" plop*
L'option -i ( --ignore-case ) est interessante quand on ne sait pas si on cherche "Chaine", "CHAINE", "chaine" etc...
Pour la substitution, j'utiliserai sed
zut... j'viens d'voir que c'est ce qu'est proposé dans le commentaire en dessous...
[^] # Re: 2 problèmes pour le prix d'un...
Posté par lom (site web personnel) . Évalué à 1.
Effectivement, c'est plus élégant dans les cas simples, donc la majorité du temps. Après find permet d'avoir des filtres de recherche beaucoup plus puissant que ceux de grep.
Par contre, j'ai beau me déchirer les yeux sur 'man grep', je ne vois nulle part la mention de l'option -r , qui marche pourtant bien.
Pour la substitution, j'utiliserai sed
Je n'ai pas d'objection, mais entre perl et moi c'est le grand amour, je n'ai pas osé le tromper.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par JMVF . Évalué à 1.
# Re: 2 problèmes pour le prix d'un...
Posté par l . Évalué à 1.
pour le remplacement a la volée des chaines en questions, ya peut etre une autre solution mais je me ferais un truc du genre :
for i in `grep -l machaine`; do
cat $i | sed -e s/machaine/autrechaine/ > $i
done
Bon c'est rapide et j'ai pas testé mais ça devrait ressembler a un truc du genre, consultes les manuels pour vérifier et être sur que je te dis pas de conneries.
(2) je sais pas j'ai pas de palm.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par Bonnefille Guilhem (site web personnel) . Évalué à 2.
Aie aie aie... on lit un fichier sur lequel on ecrit... et ce avec deux process. Y'a des chances que tout ca se termine par un fichier vide.
vaut mieux remplacer la commande precedente par :
sed -e s/machaine/autrechaine/ $i > $i.new ; mv $i.new $i
[^] # Re: 2 problèmes pour le prix d'un...
Posté par l . Évalué à 1.
Ta solution est en effet meilleur :)
[^] # Re: 2 problèmes pour le prix d'un...
Posté par -=[ silmaril ]=- (site web personnel) . Évalué à 1.
comme un grand.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par l . Évalué à 1.
[^] # Re: 2 problèmes pour le prix d'un...
Posté par kd . Évalué à 1.
sed -i -e s/machaine/autrechaine/ "$i"
extrait de man sed :
(ne pas oublier les guillemets autout du nom de fichier, ça peut jouer des tours avec des noms de fichiers contenant des espaces par exemple)
# Re: 2 problèmes pour le prix d'un...
Posté par bad sheep (site web personnel) . Évalué à 1.
Ça dépend de ce que tu veux chercher.
Cas trivial, utilise grep:
grep -ri 'chaine' /mon/repertoire/
Cas où tu veux filtrer aussi sur des motifs de fichiers (ne considère que les fichier .txt par ex):
find / -name '*.txt" -type f -exec grep -iH 'chaine' \{\} \;
# Re: 2 problèmes pour le prix d'un...
Posté par Troy McClure (site web personnel) . Évalué à 1.
find . -exec grep toto \{\} \; -print
# Re: 2 problèmes pour le prix d'un...
Posté par David Douard . Évalué à 1.
for i in *; do
grep -q "le truc que je cherche" $i;
if [ $? == 0 ] ; then
echo $i;
fi;
done
Si tu veux un recherche qui soit insensible à la casse : remplace grep par gerp -i.
Pour le cecher/remplacer, faut fair un truc avec sed ou awk, mais je mastérise pas trop ces moteur d'ER...
Mais un truc du genre
for i in *; do
cat $i | sed -e "s/totofrom/tototo/g" > $i.new;
done
fait presque ce que tu veux, ya plus qu'a remplacer tous les fichers.new en fichiers. Il me semble que cela est necessaire, car on ne peut pas piper un fichier vers lui-même en fin de course (qqun pour confirmer ?).
David
[^] # Re: 2 problèmes pour le prix d'un...
Posté par David Douard . Évalué à 2.
-il faut lire grep -i et non gerp -i
-j'avais oublié le grep -l qui fait exactement ce qu'on veut. Faut toujours aller voir nos amies les man.
David
# Re: 2 problèmes pour le prix d'un...
Posté par JMVF . Évalué à 1.
Bon du coté de sed, jamais utilisé, quoique un très vague souvenir (ma dernière expérience d'écriture de script c'était en cours de systèmes il y a 3-4 ans...). Man me voilà...
# Re: 2 problèmes pour le prix d'un...
Posté par Polaris . Évalué à 2.
http://arstechnica.com/etc/linux/2003/linux.ars-11112003-2.html(...)
Au menu: rechercher remplacer dans un répertoire, mettre en gras les occurrences d'une chaine recherchée, et quelques astuces vraiment symmpa en bash...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.