harold50 Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 Bonjour je cherche une commande linux qui va chercher une chaine de caractere dans tous les fichiers d'un repertoire. merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
fabien29200 Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 for i in $(ls); do grep XXXXXX $i && echo $i; done remplace XXXXXX par la chaîne que tu cherches. Lien vers le commentaire Partager sur d’autres sites More sharing options...
tyrann27 Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 et un simple grep "blablabla" * ça ne convient pas ? (pour autant qu'on soit dans le dossier concerné bien sur) Et tu peux même faire de la récursivité et ne pas faire attention à la casse. man grep pour plus d'infos Lien vers le commentaire Partager sur d’autres sites More sharing options...
lorinc Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 exact. grep <chaine> -R <repertoire> Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 Erm. Si c'est juste le répertoire courant, grep -H pattern * Si tu souhaites inclure les fichiers cachés grep -H pattern * .[^.]* Et enfin si c'est pour chercher récursivement dans un répertoire, c'est grep -rH pattern . Tu peux aussi utiliser -i pour être insensible à la casse, -E si ton pattern est un tantinet compliqué et --color parce que c'est quand même bien plus sympa pour trouver rapidement le morceau concerné. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Guys Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 Par défaut , je fais souvent cette commande => find . -exec grep -l "pattern" {} \; C'est assez marrant de voir les différentes solutions pour arriver aux mêmes résultats ^^ Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 21 mai 2008 Auteur Partager Posté(e) le 21 mai 2008 Par défaut , je fais souvent cette commande =>CODE find . -exec grep -l "pattern" {} \; C'est assez marrant de voir les différentes solutions pour arriver aux mêmes résultats ^^ ça c'est clair mais grep ne me convient pas en fait voila mon pb j'ai des fichiers dans lesquels y a des trucs du genre: nom, prénom, age, religion mais dans un seul fichier il y a plusieurs blocs nom, prenom, age, religion je dois ecrire un script linux ki va lire tous les fichiers à la rechercher de religion:catholique et chaque fois ke j'ai religion:catholique je dois aussi afficher le prenom le tout doit aparaitre dans un fichier sous forme de colonne une colonne religion et en face le prenom voila je vous suis toute ouie Lien vers le commentaire Partager sur d’autres sites More sharing options...
nonas Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 Donnes un exemple factice d'un de tes fichiers pour voir. Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 21 mai 2008 Partager Posté(e) le 21 mai 2008 Si tu pouvais éviter le style sms, ce serait sympa. C'est très fatiguant à lire. Grep répond à ta demande initiale. Avec les précisons que tu nous donnes, je pense que tu devrais pouvoir y arriver sans trop de difficutlés en pipant dans un awk ou un cut (voire sed, pourquoi pas). Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 21 mai 2008 Auteur Partager Posté(e) le 21 mai 2008 Si tu pouvais éviter le style sms, ce serait sympa. C'est très fatiguant à lire.Grep répond à ta demande initiale. Avec les précisons que tu nous donnes, je pense que tu devrais pouvoir y arriver sans trop de difficutlés en pipant dans un awk ou un cut (voire sed, pourquoi pas). oups désolé pour le style sms. voila un exemple de mon fichier nom: haroldprenom: d'almeida age: 50ans religion: catholique nom: elvis prenom: presley age: 60ans religion: egba glace nom: rolande prenom: vilaine age: 70ans religion: catholique nom: hervé prenom: porno age: 50ans religion: protestant nom: big prenom: gaff age: 50ans religion: protestant Lien vers le commentaire Partager sur d’autres sites More sharing options...
tuXXX Posté(e) le 22 mai 2008 Partager Posté(e) le 22 mai 2008 À mon avis le plus simple c'est effectivement l'option "-r" (ou "-R", c'est pareil), après on peut rajouter des options, le "-H" est activé automatiquement avec "-r", mais on peut utiliser le "-h" pour le désactiver, je trouve le "-I" intéressant par contre (ne traite pas les fichiers binaires), le "-i" pour ignorer la casse si on en a besoin, le "-n" pour afficher les numéros de ligne. Ici dans ton cas on peut utiliser l'option "-B" pour afficher les 3 lignes avant la ligne "religion:", ça va nous permettre de garder toutes les bonnes entrées. Ensuite, on peut ré-utiliser grep pour avoir le prénom, et enfin si tu veux avoir juste le prénom, un cut devrait suffire, mais on peut faire avec d'autres choses : $ grep -B 3 "religion: catholique" file | grep "prenom:" | cut -c 9- $ grep -B 3 "religion: catholique" file | grep "prenom:" | awk '{print $2}' $ grep -B 3 "religion: catholique" file | sed -n 's/^prenom: // p' (remplacer le "file" par "-h -r dossier/" si on veut faire ça en récursif) Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 22 mai 2008 Partager Posté(e) le 22 mai 2008 cut -d: -f1 Ou carrément (bourrin) for file in *; do if (grep catho $file &>-); then grep prenom $file | cut -d: -f1 Et pour le récursif il faut remplacer * par $(find -type f /path) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 23 mai 2008 Partager Posté(e) le 23 mai 2008 et à titre anecdotique, le -a "donner le résultat dans les fichiers binaires" nous est parfois utile quand il prend les caractères accentués pour du binaire ... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sandeman Posté(e) le 23 mai 2008 Partager Posté(e) le 23 mai 2008 aller une jolie fmt * | grep catholique | awk '{print $2 " " $8}' elle calme bien, hein Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 23 mai 2008 Partager Posté(e) le 23 mai 2008 Joli Peut être faut-il utiliser un coup de -w aussi pour le fmt, parce que chez moi ça coupe les lignes. Lien vers le commentaire Partager sur d’autres sites More sharing options...
harold50 Posté(e) le 23 mai 2008 Auteur Partager Posté(e) le 23 mai 2008 À mon avis le plus simple c'est effectivement l'option "-r" (ou "-R", c'est pareil), après on peut rajouter des options, le "-H" est activé automatiquement avec "-r", mais on peut utiliser le "-h" pour le désactiver, je trouve le "-I" intéressant par contre (ne traite pas les fichiers binaires), le "-i" pour ignorer la casse si on en a besoin, le "-n" pour afficher les numéros de ligne.Ici dans ton cas on peut utiliser l'option "-B" pour afficher les 3 lignes avant la ligne "religion:", ça va nous permettre de garder toutes les bonnes entrées. Ensuite, on peut ré-utiliser grep pour avoir le prénom, et enfin si tu veux avoir juste le prénom, un cut devrait suffire, mais on peut faire avec d'autres choses : $ grep -B 3 "religion: catholique" file | grep "prenom:" | cut -c 9- $ grep -B 3 "religion: catholique" file | grep "prenom:" | awk '{print $2}' $ grep -B 3 "religion: catholique" file | sed -n 's/^prenom: // p' (remplacer le "file" par "-h -r dossier/" si on veut faire ça en récursif) j'ai l'impression que vous ne m'avez pas bien compris la commande doit afficher deux colonnes: une colonne religion catholique et une autre avec les prenoms de ceux qui sont catholiques Lien vers le commentaire Partager sur d’autres sites More sharing options...
theocrite Posté(e) le 23 mai 2008 Partager Posté(e) le 23 mai 2008 C'est ce que fait la réponse de sandeman. Lien vers le commentaire Partager sur d’autres sites More sharing options...
zoto Posté(e) le 24 mai 2008 Partager Posté(e) le 24 mai 2008 aller une jolie fmt * | grep catholique | awk '{print $2 " " $8}' elle calme bien, hein salut Ou ça : fmt * | awk '/catholique/{print $2 " " $8}' Ça rend le grep inutil, et ça allege un peu :) Pour ceux qui ne connaitraient pas, le 'awk one liner' : http://student.northpark.edu/pemente/awk/awk1line.txt La meme chose pour sed en français : http://sed.sourceforge.net/sed1line_fr.html a+ Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.