Il tac il comando è essenzialmente il cat comando, ma il suo scopo è concatenare i file al contrario. Come gatto , ha una comoda modalità di fallback per stampare su output standard (STDOUT) se non viene fornito alcun file di output, rendendolo uno di quei comandi che vengono utilizzati più spesso come cercapersone pigro, come meno e altro —della funzione per cui prende il nome.
Il gatto il comando è spesso abusato e abusato e tac viene spesso preso come un comando scherzoso come ddate o vacca di mucca . Viene spesso messo in mostra negli articoli del pesce d'aprile che descrivono in dettaglio stupidi trucchi terminali. Quindi, potrebbe sorprendere che tac ha effettivamente una ragione legittima di esistere.
In realtà è un comando utile.
Qual è lo scopo di tac?
La tattica la pagina man fa un lavoro piuttosto scarso nel descrivere la propria funzione:
Write each FILE to standard output, last line first.
Prendendo questa affermazione come è scritta, tac dovrebbe stampare l'ultima riga di un file, quindi stampare il file partendo dalla riga uno:
$ cat metasyntactic.list
foobar
foo
bar
baz
$ tac metasyntactic.list
baz
foobar
foo
bar
Non è quello che fa, però. La sua pagina delle informazioni è molto più chiara:
copies each FILE (‘-’ means standard input),
or standard input if none are given,
to standard output, reversing the records
(lines by default) in each separately.
Ad esempio:
$ tac metasyntactic.list
baz
bar
foo
foobar
Ignorando il fatto che tac ti dà tutto al contrario, ha alcune opzioni sorprendentemente utili e uniche.
Tac e separatori
Come indica la pagina delle informazioni, il file non deve essere delimitato da una riga, il che significa che tac è altrettanto efficace, ad esempio, con un file CSV. Definisci il carattere separatore di un file con il --separator o -s opzione, insieme al delimitatore utilizzato nel file.
Per un file CSV, il carattere è probabilmente una virgola (, ), ma puoi definire qualsiasi carattere. Se un file non termina con il carattere separatore, tuttavia, ottieni un risultato imprevisto:
$ tac --separator="," metasyntactic.csv
bazbar,foo,foobar
Non è presente alcun carattere separatore tra i primi due elementi. Il record finale del file (la stringa che segue il separatore finale, in questo caso una virgola) non è di per sé seguito da una virgola, quindi viene trattato come non record da tac . Per tenere conto di questo problema, utilizza --before o -b opzione, che inserisce il carattere separatore prima di ogni record:
$ tac --separator="," --before metasyntactic.csv
baz,bar,foo,foobar
Il carattere separatore non deve essere un singolo carattere. Può anche essere un'espressione regolare (regex).
Tac ed espressioni regolari
Una spiegazione completa di regex non rientra nell'ambito di questo articolo, ma vale la pena ricordare che POSIX esteso è supportato per mezzo di una variabile di ambiente. L'espressione regolare estesa migliora notevolmente la leggibilità di un'espressione regolare e, per semplicità, è ciò che utilizza questo esempio. Supponiamo di avere un file contenente stringhe tutte separate da numeri interi:
$ cat metasyntactic.txt
foobar123foo456bar789baz898
Più risorse Linux
- Comandi Linux cheat sheet
- Cheat sheet sui comandi avanzati di Linux
- Corso online gratuito:Panoramica tecnica RHEL
- Cheat sheet della rete Linux
- Cheat sheet di SELinux
- Cheat sheet dei comandi comuni di Linux
- Cosa sono i container Linux?
- I nostri ultimi articoli su Linux
Puoi prevedere in modo affidabile che le stringhe a cui tieni siano separate da numeri interi, ma non puoi prevedere in modo affidabile quali saranno quei numeri interi. Questo è esattamente il problema che regex dovrebbe risolvere.
Per utilizzare regex nel tuo tac comando, usa il --regex o -r opzione prima del tuo --separatore definizione. Inoltre, a meno che non sia già impostato nel tuo ambiente, devi attivare il REG_EXTENDED variabile d'ambiente. Puoi impostare questa variabile su qualsiasi cosa tranne zero per attivarla e puoi farlo in tutti i soliti modi:
- Esporta la variabile per la sessione della shell che stai utilizzando.
- Imposta la variabile di ambiente nel file di configurazione della shell (come ~/.bashrc ).
- Anteponi la variabile di ambiente a tac comando (in Bash, Zsh e simili), come mostrato nell'esempio seguente:
$ REG_EXTENDED=1 tac --regex \
--separator='[0-9]+' metasyntactic.txt
89baz898bar765foo432foobar1
L'opzione regex non gestisce bene i record non terminati, anche utilizzando --before opzione. Potrebbe essere necessario modificare il file sorgente se questa funzione è importante per te.
Quando usare tac
Queste semplici ma utili opzioni di analisi rendono tac vale la pena usare come comando di analisi semplice e minimalista. Per quei semplici lavori per i quali non vale la pena scrivere un'espressione AWK o Perl, tac potrebbe essere una soluzione sensata.
La tattica comando è limitato, ovviamente, perché non manipola i record in alcun modo oltre a invertirli. Ma a volte questa è l'unica manipolazione dell'elenco di cui hai bisogno.
Ad esempio, se stai confezionando software per la distribuzione, non è insolito avere un elenco di dipendenze necessarie per l'installazione. A seconda di come hai raccolto questo elenco, potresti averlo nell'ordine in cui hai stabilito che le dipendenze erano richieste invece dell'ordine in cui devono essere installate.
Questa pratica è relativamente comune perché gli errori del compilatore colpiscono prima le dipendenze di alto livello. Cioè, se nel tuo sistema manca libavcodec quindi GCC si ferma e ti avvisa; ma dal momento che GCC non ha avuto la possibilità di sondare il tuo sistema per libvorbis e libvpx , ad esempio, non può dirti che mancano anche quelle dipendenze (e, spesso, è necessario che esistano sul tuo sistema prima di compilare libavcodec ).
Quindi, il tuo elenco di dipendenze cresce in forma dall'alto verso il basso man mano che scopri di quali librerie ha bisogno il tuo sistema per creare le librerie di cui le librerie hanno bisogno (e così via). Al termine di tale processo, tac è il modo semplice e veloce per invertire tale elenco.
Un altro fastidio comune sono i file di registro. Le voci vengono generalmente aggiunte a un file di registro, quindi gli amministratori utilizzano tail per vedere gli ultimi errori. Funziona bene, ma ci sono volte in cui vuoi vedere un "pezzo" di voci senza sapere quanto indietro devi andare. La tattica comando inviato tramite pipe a meno o altro mette le ultime voci nella parte superiore dello schermo.
Infine, molti file di configurazione non hanno un chiaro indicatore di terminazione per una determinata sezione. Puoi cercare awk e sed comandi per escogitare un modo per determinare quando finisce un blocco in un file di configurazione, oppure puoi usare tac per invertire l'ordine in modo tale che una volta che il tuo parser ha trovato la prima voce rilevante in quel blocco, sappia anche quando arrestare lettura, perché quella che era l'intestazione ora è un piè di pagina.
Tac on
Ci sono molti altri ottimi usi per tac , e probabilmente una serie di ragioni che tac è troppo rudimentale per essere una soluzione. È probabile che il tuo sistema lo abbia installato, tuttavia, ricorda questo comando la prossima volta che trovi quel caso limite nel tuo flusso di lavoro che deve davvero essere tac ked al contrario.