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: p>
trouver. -Name * .txt | Egrep mystring p>
7 Réponses :
Essayez:
[dsm@localhost:~]$ echo find . -name *.txt find . -name test.txt [dsm@localhost:~]$
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.
Ici, vous envoyez les noms de fichiers (sortie de la commande Voici quelques alternatives: p> ou même mieux p> vérifier le Rechercher une commande Aide pour vérifier ce que le Arguments uniques Do. Rechercher code>) en tant que saisie à Egrep; Vous voulez réellement exécuter Egrep sur le contenu des fichiers.
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). P> P>
Vous manquez \ + code> ou
\; code> à 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.
find . -name *.txt | xargs egrep mystring
Vous pouvez utiliser
find . -iname *.txt -exec egrep mystring \{\} \;
Voici un exemple qui retournera les chemins de fichiers d'un tout *. journal code> des fichiers qui ont une ligne qui commence par
erreur code>:
Il y a une option récursive de EGREP Vous pouvez utiliser
egrep -R "pattern" *.log
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. CODE>?
Si vous voulez seulement les noms de fichiers:
find . -type f -name '*.txt' -exec egrep pattern {} /dev/null \;