Aller au contenu

Parcourir tous les fichiers d'un repertoire


Messages recommandés

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

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

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

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: harold

prenom: 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

À 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

À 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

aller une jolie

fmt * | grep catholique | awk '{print $2 " " $8}'

elle calme bien, hein :craint:

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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...