GNU/Linux >> Tutoriels Linux >  >> Linux

Comment trouver la dernière occurrence du motif et imprimer toutes les lignes suivant la dernière occurrence ?

Cette question a déjà des réponses ici :Obtenir le texte du dernier marqueur vers EOF dans POSIX.2

(5 réponses)
Fermé il y a 2 ans.

J'ai un fichier qui contient plusieurs occurrences du modèle "====" . Ces motifs sont suivis de textes. Je souhaite rechercher la dernière occurrence de "====" motif et imprimez toutes les lignes après le motif. Des idées sur la façon de le faire en bash? Combinaison de grep , awk , sed ou tail , etc.?

Exemple de fichier :

====

First run of script

End of first Script

====

2nd run of script

End of 2nd script

====

3rd run of script

End of 3rd script

La sortie de la commande devrait ressembler à ci-dessous.

3rd run of script

End of 3rd script

Réponse acceptée :

Méthode des outils logiciels, plus efficace pour les gros fichiers puisqu'elle ne lit que la fin du fichier, puis s'arrête lorsqu'elle trouve la dernière correspondance :

tac sample.txt | grep -F -m1 -B 999999 '====' | head -n -1 | tac

Remarque :augmenter ou réduire 999999 au besoin, juste pour que ce soit plus long que n'importe quel match possible. Ce code fonctionnera mieux s'il est connu à l'avance que la dernière correspondance est connue pour être proche de la fin d'un fichier volumineux. Voir aussi Glenn Jackman la réponse avec des variantes pour awk et sed qui évitent le besoin de 999999 . Pour les systèmes avec très peu de ressources, grep est plus efficace que awk ou sed .

Pour éviter de deviner, quelques stat ajoutés la laideur fonctionnerait :

f=sample.txt; tac "$f" | grep -F -m1 -B $(stat -c '%s' "$f") '====' |
head -n -1 | tac

Linux
  1. Comment imprimer les lignes numéro 15 et 25 sur 50 lignes ?

  2. Imprimer le contenu du fichier sans les premières et dernières lignes ?

  3. Utiliser awk pour imprimer toutes les colonnes de la nième à la dernière

  4. Comment obtenir tous les fichiers dépassant une certaine taille et les supprimer

  5. Comment dissocier tous les liens symboliques sous le répertoire ?

Comment rechercher et répertorier récursivement les fichiers par date sous Linux

Comment trouver l'ID de processus d'un programme et le tuer [Astuce rapide]

Comment trouver le PID et le PPID d'un processus sous Linux

Comment installer et utiliser la commande Ack sous Linux

Rechercher et supprimer tous les répertoires nommés test sous Linux

Comment imprimer la dernière ligne d'un fichier compressé gz dans la ligne de commande ?