|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() ![]() |
En une ligne, on souhaite trouver dans quels fichiers se trouve la chaine CHAINE, lister leur chemin (relatif à notre position), et afficher les lignes contenant le fameux texte CHAINE.
grep recursif : ou avec les couleurs, si votre grep et configuration le permettent : Code :
grep --color -Rn "CHAINE" mon_repertoire/ Si on veut border la recherche avec des conditions plus strictes, par exemple, aux fichiers *.sh dont vous êtes l'utilisateur et qui sont executables : Code :
find depuis_ce_repertoire/ -type f -user moi_hornetbzz -perm /u+x -name "*.sh" -exec grep --color -Hn "CHAINE" {} 2>/dev/null \; Pour l'exercice, une version Debian/Ubuntu si vous avez les couleurs dans votre terminal : La combinaison de 3 commandes de base find, grep et sed va nous permettre cela : Code :
[EDITED] Nota1: sed est utilisé dans son contexte "éditeur" et non "remplacement" de texte à proprement dit. Cette commande pourrait être omise. Nota2: la commande fonctionne en ligne de commande. Pour l'utiliser en Bourne Shell dans un script (#!/bin/sh) au lieu de Bash (#!/bin/bash) , il faudrait modifier ((count++)) par count=$((count+1)). Nota3: pour les développeurs qui utilisent Eclipse, cette commande est l'équivalent d'un search string. L'application évidente est la vérification ponctuelle de code sur un serveur en production. |
||
|
|
30
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 481 ![]() |
Salut,
Je trouve la solution un peu lourde et tortueuse, alors qu'un simple : Code :
find $DIR -type f -name "*" -exec sed -i.bak 's/XXX/YYY/' {} 2>/dev/null \;
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
20
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() francois Ingénieur systèmes et réseaux Inscription : juillet 2006 Messages : 4 244 ![]() |
une solution non portable... c'est pas terrible...
|
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() |
[Mode avis personnel]
Trop spécifique pour être vraiment pratique, et trop difficilement adaptable. L'exercice est intéressant sur le plan pratique, mais franchement, je n'utiliserais jamais ce genre de commande [/Mode avis personnel] |
|
|
10
|
|
|
#5 | |
|
Membre chevronné
![]() ![]() |
Citation:
Ma proposition édite le path des fichiers et les lignes concernées par la recherche de texte. Volontairement sans risque. Essayes-la :-) A charge de l'utilisateur ensuite d'opérer un remplacement ou non selon son besoin. Alors il utilisera un sed de remplacement appliqué sur tel ou tel fichier. Ou une autre combinaison de commandes. Maintenant, il est certainement possible d'obtenir le même résultat autrement, je ne demande qu'à voir. |
|
|
|
10
|
|
|
#6 |
|
Membre chevronné
![]() ![]() |
|
|
|
10
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 481 ![]() |
Citation:
Code :
find $DIR -type f -name "*" -exec grep -Hn "${CHAIN}" {} 2>/dev/null \;
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
|
|
#8 |
|
Membre chevronné
![]() ![]() |
Oui ça fonctionne aussi mais cette commande est loin de réaliser toute la fonctionnalité.
|
|
|
10
|
|
|
#9 | ||||
|
Membre Expert
![]() |
j'ai dit que c'était un avis personnel : si je ne veux pas "ligne :" mais "[ligne]", si je ne veux pas de couleur, si les couleurs ne passent pas sur mon terminal, si...
en ce qui me concerne, ce n'est pas une commande que j'essaierais de retenir : elle est trop complexe et je n'en vois pas l'intérêt d'une manière générale De plus, j'ai fait un test pour voir ce que ça sortait comme résultat et ça n'a pas marché : Code :
Pour le fun, j'ai mis les couleurs que grep retourne tout seul comme un grand sur mon serveur (gentoo). Sur une machine Unix (HP-UX) sous ksh, la commande plante également : Code :
Mais encore une fois, c'est un avis personnel, et cela n'empêche pas que je trouve la commande très intéressante sur un plan pédagogique : je vais essayer de retenir la méthode utilisée (couplage de print0, de read, ...) qui pourra me servir un jour, mais pas au point d'en faire une commande générique !
|
||||
|
|
10
|
|
|
#10 |
|
Membre chevronné
![]() ![]() |
ok pour le grep -Rn, 100% d'accord, c'est clairement plus portable pour quasiment le même résultat. Je modifie en conséquence.
|
|
|
00
|
|
|
#11 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2011 Messages : 1 481 ![]() |
Citation:
Pour la couleur, rajouter "--color" à grep (pour les versions qui l'accepte) : Code :
find $DIR -type f -name "*" -exec grep --color -Hn "${CHAIN}" {} 2>/dev/null \;
__________________
$ man woman Il n'y a pas de page de manuel pour woman. |
|
|
|
10
|
|
|
#12 |
|
Membre chevronné
![]() ![]() |
![]() Merci. J'ai édité la proposition initiale (c'est vrai, un tantinet "tortueuse" mais c'était zoli comme (une) Eclipse |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com