J'ai besoin de rechercher les 50 premières lignes de chaque fichier dans un répertoire et ses sous-répertoires.
Cela fera la partie récursive, mais comment puis-je limiter aux 50 premières lignes de chaque fichier?
grep -r "matching string here" .
Certains de ces fichiers sont énormes et je veux seulement qu'ils correspondent dans les 50 premières lignes. J'essaie d'accélérer le processus en ne recherchant pas des mégaoctets de données binaires dans certains fichiers.
Réponses:
Si vous voulez juste les fichiers qui correspondent:
ou
Si vous souhaitez uniquement les chaînes correspondantes:
ou mieux,
Et si vous voulez les deux:
Remarques.
sed
au lieu du combohead
-grep
.-exec ... +
dans chaque méthode, mais vous devrez ensuite coder vous-même votre boucle intérieure! (exercice trivial laissé au lecteur). Cela pourrait être très légèrement plus efficace si vous avez des fichiers de gazillion.la source
Si vous avez besoin de la sortie grep comme dans l'original, vous pouvez faire:
Si vous n'avez besoin que des noms de fichiers, vous pouvez remplacer le 2e grep par
echo "$f"
.la source
Vous devrez combiner plusieurs utilitaires différents pour obtenir la fonctionnalité souhaitée. Utilisez la
find
commande pour récupérer les répertoires, rechercher tous les fichiers et exécuter lahead
commande sur chaque fichier trouvé. Lahead
commande peut être utilisée pour vider uniquement les 50 premières lignes de chaque fichier. Enfin, dirigez la sortie vers grep pour rechercher la chaîne souhaitée.find . -type f -exec head -n 50 {} ";" | grep "matching string here"
la source