Comment recherchez-vous du texte spécifique dans des types de fichiers spécifiques? [dupliquer]

13

Duplicata possible:
Comment puis-je grep dans les fichiers source pour du texte?

Quelle est la commande pour rechercher du texte spécifique dans des types de fichiers spécifiques, récursivement, sous le répertoire actuel?

Phillip
la source
Que voulez-vous rendre? la ligne sur laquelle se trouve le texte? le nom du fichier dans lequel se trouve le texte?
MaQleod
@MaQleod: Ce serait bien (nom de fichier + numéro de lin + extrait), si c'est possible.
Phillip
@slhck: ack-grep n'est pas installé; Je n'ai pas les autorisations pour l'installer.
Phillip
1
Vous n'en aurez pas besoin ack-grep, vous pouvez utiliser les exemples de la question comme un début (comme je l'ai dit), c'est-à-dire les find | xargs | greplignes. Pour la sortie spécifique, man grepest toujours utile à lire.
slhck
@slhck: Merci, donc je l'ai fait grep -r --include=*.<type> "<string>" ., ce qui a fonctionné. Malheureusement, la page de manuel n'est pas très simple en mentionnant le point de fin.
Phillip

Réponses:

11
find . -type f -name '*.extension' | xargs grep "string"

Cette commande exécute la recherche sur le répertoire local (.) Pour tous les fichiers dont le nom correspond au modèle * .extension, puis exécute grep pour "chaîne" sur les résultats de la recherche . Notez que find est intrinsèquement récursif. Tant que vous pouvez différencier les fichiers que vous souhaitez des fichiers dont vous ne vous basez pas sur le nom, cela devrait fonctionner pour vous.

Fopedush
la source
2
Cela rompt avec les noms de fichiers contenant des espaces, vous devez utiliser l' print0option pour être plus sûr.
slhck
Seulement find -print0n'aidera pas, utilisez également xargs -0:find . -type f -name "*.ext" -print0 | xargs -0 grep "string"
BurninLeo
0

Pour répertorier le nom de fichier, le numéro de ligne dans le fichier spécifié et la ligne, le texte apparaît:

for x in *.xxx; do [ -r $x ] | cat $x | grep -n TEXT | xargs printf "$x:%s\n";done

Il ne fonctionnera que dans le répertoire courant, mais il le formatera bien pour vous.

MaQleod
la source