Come usare i comandi cat e tac di Linux

Arte di una finestra di terminale su un desktop Linux

Fatmawati Achmad Zaenuri/Shutterstock.com



Il |_+_| e |_+_| i comandi visualizzano il contenuto dei file di testo, ma in essi 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 respinti come tali: troppo semplici per essere realmente utili. 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.





Il comando del gatto

|_+_| è abituato a esaminare il contenuto dei file di testo e per unire parti di file per formare un file più grande.

Un tempo, nell'era del dial-up modem —i file binari erano 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, recupererai di nuovo quel file.



Ovviamente, avevi quindi bisogno di un modo per ricostituire la raccolta di file più piccoli nel singolo file binario funzionante. Questo processo è stato chiamato concatenazione. Ed è qui che |_+_| è entrato e da dove prende il nome.

Annuncio pubblicitario

Le connessioni a banda larga e in fibra hanno fatto svanire quella particolare necessità, proprio come i suoni striduli delle chiamate telefoniche, quindi cosa resta |_+_| fare oggi? Veramente parecchio.

Visualizzazione di un file di testo

Avere |_+_| elencare il contenuto di un file di testo in una finestra di terminale, utilizzare il comando seguente.



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

Il contenuto del file poem1.txt è mostrato nella finestra del terminale.

Questa è solo metà della famosa poesia. Dov'è il resto? C'è un altro file qui chiamato poem2.txt. Possiamo fare |_+_| elenca il contenuto di più file con un solo comando. Tutto quello che dobbiamo fare è elencare i file in ordine sulla riga di comando.

tac

Sembra meglio; ora abbiamo l'intera poesia.

Usare il gatto con meno

La poesia è tutta lì, ma è volata oltre la finestra troppo velocemente per leggere i primi versi. Possiamo reindirizzare l'output da |_+_| in |_+_| e scorrere verso il basso il testo al nostro ritmo.

cat

Annuncio pubblicitario

Ora possiamo spostarci avanti e indietro nel testo in un flusso, anche se è contenuto in due file di testo separati.

Numerazione delle righe in un file

Possiamo avere il numero di gatto sulle righe nel file così come viene visualizzato. Per fare ciò, usiamo il |_+_| (numero) opzione.

cat

Le righe sono numerate così come vengono visualizzate nella finestra del terminale.

Non numerare le righe vuote

Siamo riusciti a numerare le righe con |_+_|, ma vengono contate anche le righe vuote tra i versi. Per numerare le righe di testo ma ignorare le righe vuote, utilizzare |_+_| (numero non vuoto).

cat

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 |_+_| per ignorare tutte le righe vuote tranne una. Guarda questo file.

Annuncio pubblicitario

Il prossimo comando causerà |_+_| per visualizzare solo una riga vuota da ogni gruppo di righe vuote. L'opzione di cui abbiamo bisogno per raggiungere questo obiettivo è |_+_| (squeeze-blank) opzione.

cat

Ciò non influisce in alcun modo sul contenuto del file; cambia solo il modo |_+_| visualizza il file.

Schede di visualizzazione

Se vuoi sapere se gli spazi bianchi sono causati da spazi o tabulazioni, puoi scoprirlo usando |_+_| (mostra schede).

cat

Le schede sono rappresentate dai caratteri ^I.

Visualizzazione della fine delle righe

Puoi verificare la presenza di spazi bianchi finali utilizzando |_+_| (fine dello spettacolo) opzione.

cat

Le estremità delle righe sono rappresentate dal carattere $.

Concatenazione di file

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.

less

usiamo |_+_| per controllare il nostro nuovo file:

-n

Annuncio pubblicitario

Il nostro nuovo file contiene il contenuto degli altri due file.

Aggiunta di testo a un file esistente

È 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 in fondo al file jabberwocky.txt e avremo la poesia completa.

In questo prossimo comando, dobbiamo usare |_+_|, non solo |_+_|. Se usiamo un singolo |_+_| bene sovrascrivi jabberwocky.txt. Non vogliamo farlo. Noi vogliamo aggiungere testo in fondo.

cat

Controlliamo il contenuto del file jabberwocky.txt:

-b

E infine, tutte le parti della poesia sono insieme.

Reindirizzamento standard

Puoi reindirizzare l'input dalla tastiera in un file usando |_+_|. 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

Annuncio pubblicitario

Possiamo iniziare a digitare non appena diamo il comando. Premiamo Ctrl+D quando abbiamo finito. Possiamo quindi controllare il contenuto del nuovo file con:

cat

Quel suono come una turbina lontana è probabilmente Lewis Carroll che gira nella sua tomba ad alta velocità.

Il comando tac

|_+_| è simile a |_+_|, ma elenca il contenuto dei file in ordine inverso .

Vediamo che:

-s

E il file è elencato nella finestra del terminale in ordine inverso. In questo caso, non ha alcun effetto sui suoi meriti letterari.

Utilizzo di tac con stdin

Usando |_+_| senza un nome di 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.

cat

Quando si preme Ctrl+D, l'input viene invertito ed elencato nella finestra del terminale.

Utilizzo di tac con i file di registro

Oltre ai trucchi da salotto di basso livello, può |_+_| fare qualcosa di utile? Sì, può. Molti file di registro aggiungono le voci più recenti in fondo al file. Usando |_+_| (e, controintuitivamente, |_+_|) possiamo inserire l'ultima voce nella finestra del terminale.

Annuncio pubblicitario

Usiamo |_+_| per elencare il file syslog al contrario e reindirizzarlo in |_+_|. Dicendo |_+_| per stampare solo la prima riga che riceve (che grazie a |_+_| è l'ultima riga del file), vediamo l'ultima voce nel file syslog.

-T

|_+_| stampa l'ultima voce dal file syslog e poi esce.

Nota che |_+_| sta stampando 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 |_+_| ha nella manica è una bellezza.

Di solito, |_+_| opera sui file di testo scorrendoli riga per riga, dal basso verso l'alto. Una riga è una sequenza di caratteri terminata da un carattere di nuova riga. Ma possiamo dire |_+_| per lavorare con altri delimitatori. Questo ci consente di trattare blocchi di dati all'interno del file di testo come record di dati.

Diciamo che abbiamo un file di registro da un programma che dobbiamo rivedere o analizzare. Diamo un'occhiata al suo formato con |_+_|.

-E

Annuncio pubblicitario

Come possiamo vedere, c'è un formato ripetuto nel file. Ci sono sequenze di tre linee di esadecimale i valori. Ogni set di tre righe esadecimali ha una riga di etichetta che inizia =SEQ, seguita da una sequenza di cifre.

Se scorriamo fino alla fine del file, possiamo vedere che ci sono molti di questi record. L'ultimo è numerato 865.

Supponiamo che per qualsiasi motivo sia necessario elaborare 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 nel file iniziano con i valori esadecimali 93, E7 e B8, in questo ordine.

Usiamo |_+_| per invertire il file. È un file molto lungo, quindi lo inseriremo in |_+_|.

cat

Ciò 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.

Annuncio pubblicitario

Abbiamo registrato in precedenza che le ultime tre righe nel file iniziano con i valori esadecimali 93, E7 e B8, in questo ordine. L'ordine di quelle righe è stato invertito. Inoltre, le linee =SEQ sono ora qui di seguito ogni set di tre righe esadecimali.

|_+_| Al salvataggio.

>>

Rompiamolo.

Il |_+_| (separatore) opzione informa |_+_| quello che vogliamo usare come delimitatore tra i nostri record. Dice |_+_| non usare il suo solito carattere di nuova riga, ma usare invece il nostro separatore.

Il |_+_| (regex) opzione dice |_+_| per trattare la stringa di separazione come a espressione regolare .

Il |_+_| (prima) l'opzione causa |_+_| per elencare il separatore prima di ogni record invece che dopo di esso (che è la posizione abituale del suo separatore predefinito, il carattere di nuova riga).

Il |_+_| (separatore) stringa |_+_| viene decifrato come segue:

Il |_+_| il carattere rappresenta l'inizio della riga. Questo è seguito da |_+_|. Questo istruisce |_+_| per cercare ogni occorrenza di =SEQ. all'inizio di una riga, seguito da qualsiasi sequenza di cifre (indicata da |_+_|) e seguita da qualsiasi altra serie di caratteri (indicata da |_+_|).

Stiamo convogliando l'intero lotto in |_+_|, come al solito.

file di registro invertito con record di dati formati correttamente

Il nostro file viene ora presentato in ordine inverso con ogni riga di etichetta =SEQ elencata prima di le sue tre righe di dati esadecimali. Le tre righe di valori esadecimali sono nella loro originale ordine all'interno di ogni record di dati.

Annuncio pubblicitario

Possiamo verificarlo semplicemente. Il primo valore delle prime tre righe di esadecimale (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 questo ordine.

Questo è un bel trucco per un one-liner della finestra del 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 delle utilità semplici che fanno bene una cosa , e che interagiscono facilmente con altre utilità, ha dato origine ad alcuni strani piccoli comandi, come |_+_|. 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.

Oppure, come dice un'altra filosofia, non disprezzare il serpente perché non ha le corna, perché chi può dire che non diventerà un drago?

Comandi Linux
File catrame · pv · gatto · tac · chmod · presa · differenza · sed · Con · uomo · spinto · popd · fsck · testdisk · seguito · fd · pandoc · cd · $PATH · awk · giuntura · jq · piega · unico · journalctl · coda · stato · ls · fstab · buttato fuori · meno · chgrp · chown · rev · Guarda · stringhe · genere · rinominare · cerniera lampo · decomprimere · montare · smontare · installare · fdisk · mkfs · rm · rmdir · rsync · df · gpg · noi · nano · mkdir · a partire dal · ln · toppa · convertire · rclone · brandello · SRM
Processi alias · schermo · superiore · Bello · renice · progresso · strace · sistema · tmux · chsh · storia · in · lotto · libero · quale · dmesg · usermod · ps · chroot · xargs · tty · mignolo · lsof · vmstat · tempo scaduto · parete · · uccisione · dormire · sudo · il suo · volta · gruppoaggiungi · usermod · gruppi · lshw · spegnimento · riavviare · fermare · spegni · passwd · lscpu · crontab · Data · bg · fg
Rete netstat · ping · traceroute · ip · ss · chi è · fail2ban · bmon · voi · dito · nmap · ftp · arricciare · wget · chi · chi sono · In · iptables · ssh-keygen · ufw

IMPARENTATO: I migliori laptop Linux per sviluppatori e appassionati

LEGGI SUCCESSIVO Foto del profilo di Dave McKay Dave McKay
Dave McKay ha usato per la prima volta i computer quando era in voga il nastro di carta perforata, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come Data Protection Officer. I suoi scritti sono stati pubblicati da howtogeek.com, cloudavvyit.com, itenterpriser.com e opensource.com. Dave è un evangelista di Linux e un sostenitore dell'open source.
Leggi la biografia completa

Articoli Interessanti