GNU/Linux >> Linux Esercitazione >  >> Linux

Come trovare l'ultima occorrenza del motivo e stampare tutte le righe dopo l'ultima occorrenza?

Questa domanda ha già risposte qui :Ottenere il testo dall'ultimo marcatore a EOF in POSIX.2

(5 risposte)
Chiuso 2 anni fa.

Ho un file che contiene più occorrenze del pattern “====” . Questi modelli sono seguiti da testi. Vorrei cercare l'ultima occorrenza di “====” motivo e stampa tutte le linee dopo il motivo. Qualche idea su come farlo in bash? Combinazione di grep , awk , sed o tail , ecc.?

File di esempio:

====

First run of script

End of first Script

====

2nd run of script

End of 2nd script

====

3rd run of script

End of 3rd script

L'output del comando dovrebbe apparire come di seguito.

3rd run of script

End of 3rd script

Risposta accettata:

Metodo degli strumenti software, più efficiente per file di grandi dimensioni poiché legge solo la fine del file, quindi si interrompe quando trova l'ultima corrispondenza:

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

Nota:aumenta o riduci 999999 se necessario, solo così è più lungo di qualsiasi possibile corrispondenza. Questo codice funzionerebbe meglio se è noto in anticipo che l'ultima corrispondenza è nota per essere vicina alla fine di un file di grandi dimensioni. Vedi anche Glenn Jackman La risposta con le varianti per awk e sed che evitano la necessità di 999999 . Per i sistemi con risorse molto basse, grep è più efficiente di awk o sed .

Per evitare di indovinare, alcuni hanno aggiunto stat la bruttezza funzionerebbe:

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

Linux
  1. Come trovare il numero di linee verticali disponibili nel terminal?

  2. Stampa il contenuto del file senza la prima e l'ultima riga?

  3. Come trovare il tipo di un file Img e montarlo?

  4. Come elencare in modo ricorsivo tutti i file e le directory

  5. Come posso fare in modo che grep stampi le righe sotto e sopra ogni riga corrispondente?

Come trovare ed elencare in modo ricorsivo i file per data in Linux

Come trovare l'ID di processo di un programma e ucciderlo [Suggerimento rapido]

Come trovare il PID e il PPID di un processo in Linux

Come installare e utilizzare il comando Ack in Linux

Trova ed elimina tutte le directory denominate test in Linux

Come stampare l'ultima riga di un file compresso gz nella riga di comando?