8
votes

Comment trouver des fichiers contenant une chaîne en utilisant egrep

Je voudrais trouver les fichiers contenant une chaîne spécifique sous Linux. J'ai essayé quelque chose comme mais je ne pouvais pas réussir:

trouver. -Name * .txt | Egrep mystring


0 commentaires

7 Réponses :


3
votes

Essayez:

[dsm@localhost:~]$ echo find . -name *.txt
find . -name test.txt
[dsm@localhost:~]$ 


2 commentaires

Je suggérerais également de joindre le modèle après -Name dans des guillemets pour empêcher la coque de faire le motif correspondant à ce sujet.


Je voudrais remercier tous vous fournir de telles réponses complètes.



15
votes

Ici, vous envoyez les noms de fichiers (sortie de la commande Rechercher ) en tant que saisie à Egrep; Vous voulez réellement exécuter Egrep sur le contenu des fichiers.

Voici quelques alternatives: xxx

ou même mieux xxx < / pré>

vérifier le Rechercher une commande Aide pour vérifier ce que le Arguments uniques Do.
La première approche va augmenter un nouveau processus pour chaque fichier, tandis que la seconde passera plus d'un fichier comme argument à Egrep; Les drapeaux -Print0 et -0 sont nécessaires pour traiter des noms de fichiers potentiellement désagréables (permettant de séparer les noms de fichiers correctement, même si un nom de fichier contient un espace, par exemple).


3 commentaires

Vous manquez \ + ou \; à la fin de votre première commande.


Cette tentative ne tente pas de trouver le nom de fichier dans mystring? Je pense qu'il cherche l'inverse.


@SPATZ: Caractéristique pratique à propos de \ + est que + n'est pas un caractère spécial à la plupart des coquilles (je ne sais pas de coquilles où il est spécial, mais je suis réticent à dire tout), de sorte que vous n'avez pas besoin de la barre oblique inverse.



1
votes
find . -name *.txt | xargs egrep mystring

0 commentaires

1
votes

Vous pouvez utiliser

find . -iname *.txt -exec egrep mystring \{\} \;


0 commentaires

1
votes

Voici un exemple qui retournera les chemins de fichiers d'un tout *. journal des fichiers qui ont une ligne qui commence par erreur : xxx


0 commentaires

1
votes

Il y a une option récursive de EGREP Vous pouvez utiliser

egrep -R "pattern" *.log


2 commentaires

Cela ne fonctionne pas. L'option -R ne recouvre que dans des répertoires s'ils sont fournis dans la liste des arguments. Dans ce cas, tous les fichiers de ces répertoires seront lus non seulement des fichiers se terminant par .log. Si vous avez un succès avec cette méthode, c'est parce qu'il existe des fichiers se terminant par .log dans le répertoire actuel car alors le shell analyse le * .log.


Peut-être avec Egrep -r "motif" --include = *. LOG. ?



1
votes

Si vous voulez seulement les noms de fichiers:

find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;


0 commentaires