web-dev-qa-db-fra.com

obtenir la dernière ligne de la recherche grep sur plusieurs fichiers

J'ai actuellement un problème avec une commande grep.

J'ai trouvé le moyen d'afficher uniquement la dernière ligne d'une recherche grep: 

grep PATERN FILE_NAME | tail -1

Je trouve également le moyen de faire une recherche grep dans plusieurs fichiers sélectionnés:

find . -name "FILE_NAME" | xargs -I name grep PATERN name

Maintenant, je voudrais seulement obtenir la dernière ligne du résultat de grep pour chaque fichier unique ..__J'ai essayé ceci: 

 find . -name "FILE_NAME" | xargs -I name grep PATERN name | tail -1

Cela ne me renvoie que la dernière valeur du dernier fichier où je voudrais avoir le dernier modèle correspondant pour chaque fichier.

21
B.jour
for f in $(find . -name "FILE_NAME"); do grep PATERN $f | tail -1; done
30
Daniel Frey

Que diriez-vous de ce bon monsieur

find . -name "FILE_NAME" -print0 | while read -d '' aa
do
  grep PATTERN "$aa" | tail -1
done
3
Steven Penny

Vous pouvez commencer avec le paramètre -B (before) de grep. Par exemple pour obtenir 5 lignes avant le match:

duli@i5 /etc/php5/Apache2 $ grep -i -B5 timezone php.ini 
[CLI Server]
; Whether the CLI web server uses ANSI color coding in its terminal output.
cli_server.color = On

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
0
duli

vous pouvez aussi utiliser find pour exécuter des commandes:

find . -name "<file-name-to-find>" -exec grep "<pattern-to-match>" "{}" ";" | tail -1

"{}" est le nom du fichier, faites attention à la globalisation et à la suppression de Shell lors de l'écriture de la commande

0
Augusto Hack