Si tout est dans un seul répertoire, vous pouvez faire:
for file in *fileprefix*; do
grep 'search string' "$file" | tail -1
done
S'il s'agit de fichiers volumineux, il peut être utile d'accélérer les choses en utilisant tac
pour imprimer le fichier dans l'ordre inverse (dernière ligne en premier), puis grep -m1
pour faire correspondre la première occurrence. De cette façon, vous évitez d'avoir à lire l'intégralité du fichier:
for file in *fileprefix*; do
tac file | grep -m1 'search string'
done
Ces deux supposent qu'il n'y a aucun répertoire correspondant fileprefix
. S'il y en a, vous obtiendrez une erreur que vous pouvez simplement ignorer. Si c'est un problème, recherchez uniquement les fichiers:
for file in *fileprefix*; do
[ -f "$file" ] && tac file | grep -m1 'search string'
done
Si vous avez également besoin du nom de fichier imprimé, ajoutez -H
à chaque grep
appel. Ou, si votre grep
ne le prend pas en charge, dites-lui de rechercher également /dev/null
. Cela ne changera pas la sortie mais grep
étant donné que plusieurs fichiers sont fournis, il affichera toujours le nom du fichier pour chaque hit:
for file in *fileprefix*; do
grep 'search string' "$file" /dev/null | tail -1
done