I comandi cat e tac visualizzano il contenuto dei file di testo, ma c’è molto di più di quanto sembri. Immergiti un po ‘più a fondo e impara alcuni trucchi produttivi della riga di comando di Linux.
Questi sono due semplici piccoli comandi, spesso liquidati come se fossero proprio questo: troppo semplici per essere di reale utilità. Ma una volta che conosci i diversi modi in cui puoi usarli, vedrai che sono perfettamente in grado di fare la loro giusta parte del lavoro pesante quando si tratta di lavorare con i file.
Sommario:
Il gatto Command
il gatto è abituato esaminare il contenuto dei file di testoe per unire parti di file insieme per formare un file più grande.
Un tempo, nell’era del dial-up modem—I file binari venivano spesso suddivisi in diversi file più piccoli per facilitare il download. Invece di scaricare un file di grandi dimensioni, hai ritirato ogni file più piccolo. Se un singolo file non è stato scaricato correttamente, dovresti semplicemente recuperare quel file di nuovo.
Ovviamente, era quindi necessario un modo per ricostituire la raccolta di file più piccoli nel singolo file binario di lavoro. Quel processo è stato chiamato concatenazione. Ed è qui che entra in gioco il gatto e da dove prende il nome.
Le connessioni a banda larga e in fibra hanno causato la dissolvenza di quella particolare esigenza, proprio come i suoni stridenti di dial-up, quindi cosa resta da fare per gatto oggi? Un bel po ‘in realtà.
Visualizzazione di un file di testo
Per fare in modo che cat elenchi il contenuto di un file di testo in una finestra di terminale, utilizzare il seguente comando.
Assicurati che il file sia un file di testo. Se provi a elencare il contenuto di un file binario nella finestra del terminale, i risultati saranno imprevedibili. Potresti finire con una sessione terminale bloccata o peggio.
cat poem1.txt
Il contenuto del file poem1.txt viene mostrato nella finestra del terminale.
Questa è solo la metà della famosa poesia. Dov’è il resto? C’è un altro file qui chiamato poem2.txt. Possiamo fare in modo che cat list il contenuto di più file con un comando. Tutto quello che dobbiamo fare è elencare i file in ordine sulla riga di comando.
cat poem1.txt poem2.txt
Sembra migliore; ora abbiamo l’intera poesia.
Usare il gatto con meno
La poesia è tutta lì, ma è passata davanti alla finestra troppo velocemente per leggere i primi versi. Possiamo convogliare l’output di cat in less e scorrere il testo al nostro ritmo.
cat poem1.txt poem2.txt | less
Ora possiamo spostarci avanti e indietro nel testo in un flusso, anche se è contenuto in due file di testo separati.
Numerazione delle linee in un file
Possiamo avere il numero di gatto delle righe nel file così come viene visualizzato. Per fare ciò, usiamo l’opzione -n (numero).
cat -n poem1.txt
Le righe sono numerate così come vengono visualizzate nella finestra del terminale.
Non numerare le righe vuote
Siamo riusciti a numerare le righe per gatto, ma vengono contate anche le righe vuote tra i versi. Per avere le righe di testo numerate ma per ignorare le righe vuote, usa l’opzione -b (number-nonblank).
cat -b poem1.txt
Ora le righe di testo sono numerate e le righe vuote vengono saltate.
Non mostrare più righe vuote
Se ci sono sezioni di righe vuote consecutive in un file, possiamo chiedere a cat di ignorare tutte le righe vuote tranne una. Guarda questo file.
Il comando successivo farà sì che cat visualizzi solo una riga vuota da ogni gruppo di righe vuote. L’opzione di cui abbiamo bisogno per ottenere questo risultato è l’opzione -s (squeeze-blank).
cat -s poem1.txt
Ciò non influisce in alcun modo sul contenuto del file; cambia solo il modo in cui cat visualizza il file.
Schede di visualizzazione
Se vuoi sapere se gli spazi bianchi sono causati da spazi o tabulazioni, puoi scoprirlo usando l’opzione -T (mostra-tabs).
cat -T poem1.txt
Le schede sono rappresentate dai caratteri “^ I”.
Visualizzazione delle estremità delle righe
È possibile verificare la presenza di spazi vuoti finali utilizzando l’opzione -E (show-end).
cat -E poem1.txt
Le estremità delle righe sono rappresentate dal carattere “$”.
File concatenati
Non ha senso salvare una poesia in due file, con una metà in ciascuno. Uniamoli insieme e creiamo un nuovo file con l’intera poesia al suo interno.
cat poem1.txt poem2.txt > jabberwocky.txt
Il nostro nuovo file contiene il contenuto degli altri due file.
Aggiunta di testo a un file esistente
Così va meglio, ma in realtà non è l'intera poesia. Manca l'ultimo verso. L'ultimo verso in Jabberwocky è lo stesso del primo verso.
Se abbiamo il primo verso in un file, possiamo aggiungerlo alla fine del file jabberwocky.txt e avremo la poesia completa.
In questo prossimo comando, dobbiamo usare >>, non solo>. Se usiamo un singolo> sovrascriveremo jabberwocky.txt. Non vogliamo farlo. Vogliamo aggiungere del testo alla fine di esso.
cat first_verse.txt >> jabberwocky.txt
Controlliamo il contenuto del file jabberwocky.txt:
cat jabberwocky.txt < / pre>
E infine, tutte le parti della poesia sono insieme.
Reindirizzamento stdin
Puoi reindirizzare l'input dalla tastiera in un file usando cat. Tutto ciò che digiti viene reindirizzato nel file finché non premi Ctrl + D. Nota che usiamo un singolo> perché vogliamo creare il file (o sovrascriverlo, se esiste).
cat > my_poem.txt
Possiamo iniziare a digitare non appena emettiamo il comando. Premiamo Ctrl + D quando abbiamo finito. Possiamo quindi controllare il contenuto del nuovo file con:
cat my-poem.txt
Quel suono come una turbina lontana è probabilmente Lewis Carroll che gira nella sua tomba ad alta velocità.
Il comando tac
tac è simile a cat, ma elenca il contenuto dei file in ordine inverso.
Vediamo che:
tac my_poem.txtE il file viene elencato nella finestra del terminale in ordine inverso. In questo caso, non ha alcun effetto sui suoi meriti letterari.
Usare tac con stdin
L'uso di tac senza un nome file lo farà funzionare sull'input dalla tastiera. Premendo Ctrl + D si interromperà la fase di input e tac elencherà in ordine inverso qualunque cosa tu abbia digitato.
tacQuando si preme Ctrl + D, l'input viene invertito ed elencato nella finestra del terminale.
Utilizzo di tac con i file di registro
A parte i trucchi da salotto di basso livello, può tac fare qualcosa di utile? Sì, può. Molti file di registro aggiungono le loro voci più recenti alla fine del file. Usando tac (e, controintuitivamente, head) possiamo far apparire l'ultima voce nella finestra del terminale.
Usiamo tac per elencare il file syslog al contrario e inserirlo in head. Dicendo a head di stampare solo la prima riga che riceve (che grazie a tac è l'ultima riga del file), vediamo l'ultima voce nel file syslog.
tac /var/log/syslog | head -1head stampa l'ultima voce dal file syslog e quindi esce.
Notare che head stampa solo una riga, come richiesto, ma la riga è così lunga che si avvolge due volte. Ecco perché sembrano tre righe di output nella finestra del terminale.
Utilizzo di tac con i record di testo
L'ultimo trucco che tac ha nella manica è una bellezza.
Di solito, tac opera su file di testo facendoli scorrere riga per riga, dal basso verso l'alto. Una riga è una sequenza di caratteri terminata da un carattere di nuova riga. Ma possiamo dire a tac di lavorare con altri delimitatori. Questo ci consente di trattare "blocchi" di dati all'interno del file di testo come record di dati.
Supponiamo di avere un file di registro di un programma che dobbiamo rivedere o analizzare. Diamo un'occhiata al suo formato con meno.
less logfile.datCome possiamo vedere, c'è un formato ripetuto per il file. Ci sono sequenze di tre righe di esadecimale valori. Ciascun gruppo di tre righe esadecimali ha una riga dell'etichetta che inizia con "= SEQ", seguita da una sequenza di cifre.
Se scorriamo fino alla fine del file, possiamo vedere che ci sono molti di questi record. L'ultima è numerata 865.
Supponiamo che per qualsiasi motivo abbiamo bisogno di lavorare su questo file in ordine inverso, record di dati per record di dati. L'ordine delle tre righe esadecimali in ogni record di dati deve essere mantenuto.
Prenderemo nota che le ultime tre righe del file iniziano con i valori esadecimali 93, E7 e B8, in quest'ordine.
Usiamo tac per invertire il file. È un file molto lungo, quindi lo inseriremo in less.
tac logfile.dat | lessCiò inverte il file, ma non è il risultato che vogliamo. Vogliamo che il file venga invertito, ma le righe in ogni record di dati devono essere nell'ordine originale.
Abbiamo registrato in precedenza che le ultime tre righe del file iniziano con valori esadecimali 93, E7 e B8, in quest'ordine. L'ordine di quelle righe è stato invertito. Inoltre, le linee "= SEQ" sono ora sotto ogni gruppo di tre linee esadecimali.
tac in soccorso.
tac -b -r -s ^=SEQ.+[0-9]+*$ logfile.dat | lessAnalizziamolo.
L'opzione -s (separatore) informa tac cosa vogliamo usare come delimitatore tra i nostri record. Dice a tac di non usare il suo solito carattere di nuova riga, ma di usare invece il nostro separatore.
L'opzione -r (regex) dice a tac di trattare la stringa separatrice come un file espressione regolare.
L'opzione -b (prima) fa sì che tac elenchi il separatore prima di ogni record invece che dopo di esso (che è la posizione usuale del suo separatore predefinito, il carattere di nuova riga).
La stringa -s (separatore) ^ = SEQ. +[0-9]+ * $ viene decifrato come segue:
Il carattere ^ rappresenta l'inizio della riga. Questo è seguito da = SEQ. +[0-9]+ * $. Questo indica a tac di cercare ogni occorrenza di "= SEQ". all'inizio di una riga, seguita da qualsiasi sequenza di cifre (indicata da [0-9]) e seguito da qualsiasi altro set di caratteri (indicato da * $).
Stiamo convogliando l'intero lotto in meno, come al solito.
Il nostro file viene ora presentato in ordine inverso con ciascuna riga dell'etichetta "= SEQ" elencata prima delle sue tre righe di dati esadecimali. Le tre righe di valori esadecimali sono nell'ordine originale all'interno di ogni record di dati.
Possiamo verificarlo semplicemente. Il primo valore delle prime tre righe esadecimali (che erano le ultime tre righe prima che il file fosse invertito) corrisponde ai valori che abbiamo registrato in precedenza: 93, E7 e B8, in quest'ordine.
Questo è un bel trucco per una finestra di terminale.
Tutto ha uno scopo
Nel mondo Linux, anche i comandi e le utilità apparentemente più semplici possono avere proprietà sorprendenti e potenti.
La filosofia progettuale di semplici utilità che fa bene una cosa, e che interagiscono facilmente con altre utilità, ha dato origine ad alcuni strani piccoli comandi, come tac. A prima vista, sembra essere un po 'una stranezza. Ma quando scruti sotto la superficie, c'è un potere inaspettato che puoi sfruttare a tuo vantaggio.
O, come dice un'altra filosofia: "Non disprezzare il serpente per non avere le corna, perché chi può dire che non diventerà un drago?"