GNU/Linux >> Linux Esercitazione >  >> Linux

4 Utilizzo essenziale e pratico del comando Cut in Linux

Il comando cut è lo strumento canonico per rimuovere le “colonne” da un file di testo. In questo contesto, una "colonna" può essere definita come un intervallo di caratteri o byte identificati dalla loro posizione fisica sulla riga, oppure un intervallo di campi delimitato da un separatore.

Ho scritto in precedenza sull'utilizzo dei comandi AWK. In questa guida dettagliata, spiegherò quattro esempi pratici e essenziali del comando cut in Linux che ti aiuteranno alla grande.

4 esempi pratici del comando Cut in Linux

Se preferisci, puoi guardare questo video che spiega gli stessi esempi pratici di comando di taglio che ho elencato nell'articolo.

1. Lavorare con intervalli di caratteri

Quando viene invocato con -c opzione della riga di comando, il comando taglia rimuoverà carattere intervalli.

Come qualsiasi altro filtro, il comando cut non cambia il file di input in posizione ma copierà i dati modificati nel suo output standard. È tua responsabilità reindirizzare l'output del comando a un file per salvare il risultato o utilizzare una pipe per inviarlo come input a un altro comando.

Se hai scaricato i file di prova di esempio utilizzati nel video sopra, puoi vedere il BALANCE.txt file di dati, proveniente direttamente da un software di contabilità che mia moglie usa al lavoro:

; -LOC 00000001938,005 1012017 623372 ACCOMODATION GUIDE ALNEENRE-4771-LOC 00000001333,005 1012017 445452 VAT BS/ENC ALNEENRE-4771-LOC 00000000266,605 1012017 4356 PAYABLES ALNEENRE-4771-LOC 00000001599,606 1012017 4356 PAYABLES FACT FA00006253 - BIT QUIROBEN 00000001837,206 1012017 445452 IVA BS/ENC FATTO FA000 06253 - BIT QUIROBEN 00000000306,206 1012017 623795 LIBRO DI GUIDA TURISTICA FACT FA00006253 - BIT QUIROBEN 00000001531,00

Questo è un file di testo a larghezza fissa poiché i campi di dati sono riempiti con un numero variabile di spazi per garantire che vengano visualizzati come una tabella ben allineata.

Come corollario, una colonna di dati inizia e finisce sempre nella stessa posizione del carattere su ciascuna riga. C'è però un piccolo trabocchetto:nonostante il nome, il taglio comando richiede in realtà di specificare l'intervallo di dati che desideri conservare , non l'intervallo che desideri rimuovere . Quindi, se ho bisogno di solo il NUMERO CONTO e ACCOUNTLIB colonne nel file di dati sopra, lo scriverei:

sh$ taglio -c 25-59 BALANCE.txt | headACCOUNTNUM ACCOUNTLIB623477 TIDE SCHEDULE445452 IVA BS/ENC4356 /accountPAYABLES623372 GUIDA ALLOGGIO445452 IVA BS/ENC4356 DEBITI4356 DEBITI445452 IVA BS/ENC623795 GUIDA TURISTICA 

Cos'è un intervallo?

Come abbiamo appena visto, il comando cut richiede di specificare l'intervallo di dati che vogliamo conservare. Quindi, introduciamo più formalmente cos'è un intervallo:per il cut comando, un intervallo è definito da una posizione iniziale e finale separate da un trattino. Gli intervalli sono basati su 1, ovvero il primo elemento della riga è il numero dell'elemento 1, non 0. Gli intervalli sono inclusivi:l'inizio e la fine verranno mantenuti nell'output, così come tutti i caratteri tra di essi. È un errore specificare un intervallo la cui posizione finale è prima ("inferiore") rispetto alla sua posizione iniziale. Come scorciatoia, puoi omettere l'inizio o valore finale come descritto nella tabella seguente:

  • a-b :l'intervallo tra aeb (incluso)
  • a :equivalente all'intervallo a-a
  • -b :equivalente a 1-a
  • b- :equivalente a b-∞

I comandi di taglio consentono di specificare più intervalli separandoli con una virgola. Ecco un paio di esempi:

# Mantieni i caratteri da 1 a 24 (inclusi)cut -c -24 BALANCE.txt# Mantieni i caratteri da 1 a 24 e da 36 a 59 (inclusi)cut -c -24,36-59 BALANCE.txt # Mantieni i caratteri da 1 a 24, da 36 a 59 e 93 fino alla fine della riga (compreso)cut -c -24,36-59,93- BALANCE.txt 

Una limitazione (o caratteristica, a seconda di come la vedi) del taglio il comando è che non riordinerà mai i dati . Quindi, il comando seguente produrrà esattamente lo stesso risultato del precedente, nonostante gli intervalli siano specificati in un ordine diverso:

cut -c 93-,-24,36-59 BALANCE.txt 

Puoi verificarlo facilmente usando il diff comando:

diff -s <(cut -c -24,36-59,93- BALANCE.txt) \ <(cut -c 93-,-24,36-59 BALANCE.txt)File /dev/ fd/63 e /dev/fd/62 sono identici 

Allo stesso modo, il taglio comando non duplica mai i dati :

# Ci si potrebbe aspettare che potrebbe essere un modo per ripetere# la prima colonna tre volte, ma no...cut -c -10,-10,-10 BALANCE.txt | testa -5ACCDOC4445 

Vale la pena ricordare che c'era una proposta per un -o opzione per rimuovere queste due ultime limitazioni, consentendo il taglio utility per riordinare o duplicare i dati. Ma questo è stato respinto dal comitato POSIX"perché questo tipo di miglioramento non rientra nell'ambito della bozza dello standard IEEE P1003.2b."

Per quanto mi riguarda, non conosco nessuna versione tagliata che implementi quella proposta come estensione. Ma se lo fai, per favore, condividilo con noi usando la sezione commenti!

2. Lavorare con intervalli di byte

Quando viene invocato con -b opzione della riga di comando, il comando cut rimuoverà byte intervalli.

A prima vista, non c'è alcuna differenza evidente tra personaggio e byte intervalli:

sh$ diff -s <(cut -b -24,36-59,93- BALANCE.txt) \ <(cut -c -24,36-59,93- BALANCE.txt)File / dev/fd/63 e /dev/fd/62 sono identici 

Questo perché il mio file di dati di esempio utilizza la codifica dei caratteri US-ASCII ("charset") come file -i comando può indovinarlo correttamente:

sh$ file -i BALANCE.txtBALANCE.txt:testo/normale; charset=us-ascii 

In quella codifica dei caratteri, esiste una mappatura uno-a-uno tra caratteri e byte. Utilizzando un solo byte si possono teoricamente codificare fino a 256 caratteri diversi (cifre, lettere, segni di punteggiatura, simboli, … ) In pratica quel numero è molto più basso poiché le codifiche dei caratteri prevedono alcuni valori speciali (come i 32 o 65 caratteri di controllo generalmente trovato). Ad ogni modo, anche se potessimo utilizzare l'intero intervallo di byte, sarebbe tutt'altro che sufficiente per memorizzare la varietà della scrittura umana. Quindi, oggi, la mappatura uno-a-uno tra caratteri e byte è più l'eccezione che la norma ed è quasi sempre sostituita dall'onnipresente codifica multibyte UTF-8. Vediamo ora come il comando cut potrebbe gestirlo.

Lavorare con caratteri multibyte

Come ho detto in precedenza, i file di dati di esempio utilizzati come esempi per quell'articolo provengono da un software di contabilità utilizzato da mia moglie. Aggiunge che ha aggiornato il software di recente e, successivamente, i file di testo esportati erano leggermente diversi. Ti ho fatto provare a individuare la differenza da solo:

; -4701-LOC 00000001938,005 1012017 623372 ACCOMODATION GUIDE ALNÉENRE-4771-LOC 00000001333,005 1012017 445452 VAT BS/ENC ALNÉENRE-4771-LOC 00000000266,605 1012017 4356 PAYABLES ALNÉENRE-4771-LOC 00000001599,606 1012017 4356 PAYABLES FACT FA00006253 - BIT QUIROBEN 00000001837,206 1012017 445452 IVA BS/ENC FATTO FA 00006253 - BIT QUIROBEN 00000000306,206 1012017 623795 GUIDA TURISTICA FATTO FA00006253 - BIT QUIROBEN 00000001531,00

Il titolo di questa sezione potrebbe aiutarti a trovare ciò che è cambiato. Ma, trovato o meno, vediamo ora le conseguenze di quel cambiamento:

sh$ cut -c 93-,-24,36-59 BALANCE-V2.txtACCDOC ACCDOCDATE ACCOUNTLIB DEBIT CREDIT4 1012017 TIDE SCHEDULE 00000001615,004 1012017 VAT BS/ENC 00000000323,004 1012017 DEBITI 00007 ACCO00129007 ACCO00129007 ACCO00130107 ACCO00130107 GUIDE 00000001333,005 1012017 VAT BS/ENC 00000000266,605 1012017 PAYABLES 00000001599,606 1012017 PAYABLES 00000001837,206 1012017 VAT BS/ENC 00000000306,206 1012017 TOURIST GUIDE BOOK 00000001531,0019 1012017 SEMINAR FEES 00000000080,0019 1012017 PAYABLES 00000000080,0028 1012017 MAINTENANCE 00000000746,5828 1012017 P.IVA BS/ENC 00000000149,3228 1012017 PAYABLES 00000000895,9031 1012017 PAYABLES 00000000240,0031 1012017 VAT BS/DEBIT 00000000040,0031 1012017 ADVERTISEMENTS 00000000200,0032 1012017 WATER 00000000202,2032 1012017 VAT BS/DEBIT 00000000020,2232 1012017 WATER 00000000170,2432 1012017 VAT BS/DEBIT 00000000009,3732 1012017 Debiti 00000000402.0334 1012017 Costi di affitto 00000000018 436 1012017 IVA BS/ENC 00000000013,83 

Ho copiato sopra l'output del comando in-extenso quindi dovrebbe essere ovvio che qualcosa è andato storto con l'allineamento delle colonne.

La spiegazione è che il file di dati originale conteneva solo caratteri US-ASCII (simbolo, punteggiatura, numeri e lettere latine senza segni diacritici)

Ma se guardi da vicino il file prodotto dopo l'aggiornamento del software, puoi vedere che il nuovo file di dati di esportazione ora conserva le lettere accentate. Ad esempio, l'azienda denominata "ALNÉENRE" ora è scritta correttamente mentre in precedenza era esportata come "ALNEENRE" (senza accento)

Il file -i l'utilità non ha perso quella modifica poiché ora segnala il file come codificato UTF-8:

sh$ file -i BALANCE-V2.txtBALANCE-V2.txt:testo/normale; set di caratteri=utf-8 

Per vedere come vengono codificate le lettere accentate in un file UTF-8, possiamo usare hexdump utility che ci permette di guardare direttamente i byte in un file:

# Per ridurre il disordine, concentriamoci solo sulla seconda riga del filesh$ sed '2!d' BALANCE-V2.txt4 1012017 623477 TIDE SCHEDULE ALNÉENRE-4701-LOC 00000001615,00sh$ sed '2! d' EQUILIBRIO-V2.txt | hexdump -c00000000 34 20 20 20 20 20 20 20 20 20 31 30 31 32 30 31 | 4 101201 | 00000010 37 20 20 20 20 20 20 20 36 32 33 34 37 37 20 20 | 7 623477 | 00000020 20 20 20 20 20 54 49 49 44 45 20 53 43 48 45 44 55 4c 45 | TIDE SCHEDULE|00000030 20 20 20 20 20 20 20 20 20 20 20 41 4c 4e c3 89 | ALN.. | 000|00000060 30 30 30 30 31 36 31 35 2c 30 30 20 20 20 20 20 |00001615,00 |00000070 20 20 20 20 20 20 20 20 20 20 20 0a | .|0000007c 

Sulla riga 00000030 di hexdump output, dopo alcuni spazi (byte 20 ), puoi vedere:

  • la lettera A è codificato come byte 41 ,
  • la lettera L è codificato nel byte 4c ,
  • e la lettera N è codificato come byte 4e .

Ma la lettera maiuscola LATINA E CON ACUTO (come è il nome ufficiale della lettera É nello standard Unicode) è codificato utilizzando i due byte c3 89

Ed ecco il problema:usare il cut il comando con intervalli espressi come posizioni di byte funziona bene per le codifiche a lunghezza fissa, ma non per quelle a lunghezza variabile come UTF-8 o Shift JIS. Ciò è chiaramente spiegato nel seguente estratto non normativo dello standard POSIX:

Le versioni precedenti dell'utilità di taglio funzionavano in un ambiente in cui byte e caratteri erano considerati equivalenti (elaborazione del modulo e in alcune implementazioni). Nel mondo esteso dei caratteri multibyte, è stata aggiunta la nuova opzione -b.

Ehi, aspetta un minuto! Non stavo usando il -b opzione nell'esempio "difettoso" sopra, ma il -c opzione. Quindi, non dovrebbe che hanno funzionato?!?

Sì, dovrebbe :è un peccato, ma siamo nel 2018 e nonostante ciò, a partire da GNU Coreutils 8.30, l'implementazione GNU dell'utility cut non gestisce ancora correttamente i caratteri multibyte. Per citare la documentazione GNU, il -c l'opzione è "Lo stesso di -b per ora, ma l'internazionalizzazione lo cambierà[… ]" — una menzione presente da più di 10 anni a questa parte!

D'altra parte, l'implementazione OpenBSD dell'utilità di taglio è conforme a POSIX e rispetterà le impostazioni locali correnti per gestire correttamente i caratteri multibyte:

# Assicurati che i comandi secondari sappiano che stiamo usando file di testo codificati UTF-8#openbsd-6.3$ export LC_CTYPE=en_US.UTF-8# Con l'opzione `-c`, cut funziona correttamente con caratteri multi-byteopenbsd . IVA BS/ENC 00000000266.605 1012017 Paifici 00000001599.606 1012017 Paiumi 00000001837.206 1012017 IVA BS/ENC 000000306 PAYABLES 00000000080,0028 1012017 MAINTENANCE 00000000746,5828 1012017 VAT BS/ENC 00000000149,3228 1012017 PAYABLES 00000000895,9031 1012017 PAYABLES 00000000240,0031 1012017 VAT BS/DEBIT 00000000040,0031 1012017 ADVERTISEMENTS 00000000200,0032 1012017 WATER 00000000202,2032 1012017 VAT BS/DEBIT 00000000020,2232 1012017 WATER 00000000170,2432 1012017 VAT BS/DEBIT 00000000009,3732 1012017 PAYABLES 00000000402,0334 1012017 RENTAL COSTS 00000000018,0034 1012017 PAYABLES 00000000018,0035 1012017 MISCELLANEOUS CHARGES 00000000015,0035 101201 7 IVA BS/DEBITO 00000000003,0035 1012017 DEBITI 00000000018,0036 1012017 TELEFONO FISSO 00000000069,1436 1012017 IVA BS/ENC 00000000013,83 

Come previsto, quando si utilizza -b modalità byte invece di -c modalità carattere, l'implementazione del taglio OpenBSD si comporta come il cut legacy :

openbsd-6.3$ cut -b -24,36-59,93- BALANCE-V2.txtACCDOC ACCDOCDATE ACCOUNTLIB DEBIT CREDIT4 1012017 TIDE SCHEDULE 00000001615,004 1012017 VAT BS/ENC 00000000323,004 1012017 DEBITI 0012017 DEBITI 00000001615,000 1012017 ACCOMODATION GUIDE 00000001333,005 1012017 VAT BS/ENC 00000000266,605 1012017 PAYABLES 00000001599,606 1012017 PAYABLES 00000001837,206 1012017 VAT BS/ENC 00000000306,206 1012017 TOURIST GUIDE BOOK 00000001531,0019 1012017 SEMINAR FEES 00000000080,0019 1012017 PAYABLES 00000000080,0028 1012017 MANUTENZIONE 00000000746,5828 1012017 IVA BS/ENC 00000000149,32 28 1012017 PAYABLES 00000000895,9031 1012017 PAYABLES 00000000240,0031 1012017 VAT BS/DEBIT 00000000040,0031 1012017 ADVERTISEMENTS 00000000200,0032 1012017 WATER 00000000202,2032 1012017 VAT BS/DEBIT 00000000020,2232 1012017 WATER 00000000170,2432 1012017 VAT BS/DEBIT 00000000009,3732 1012017 PAYABLES 00000000402,0334 1012017 RENTAL COSTS 00000000018,0034 1012017 PAYABLES 00000000018,0035 1012017 MISCELLANEOUS CHARGES 00000000015,0035 1012017 VAT BS/DEBIT 00000000003,0035 1012017 PAYABLES 00000000018,0036 1012017 LANDLINE TELEPHONE 0000 0000069,1436 1012017 P.IVA BS/ENC 00000000013,83 

3. Lavorare con i campi

In un certo senso, lavorare con i campi in un file di testo delimitato è più facile per il cut utilità, poiché dovrà solo individuare i delimitatori di campo (un byte) su ciascuna riga, copiando quindi alla lettera il contenuto del campo nell'output senza preoccuparsi di problemi di codifica.

Ecco un esempio di file di testo delimitato:

sh$ head BALANCE.csvACCDOC;ACCDOCDATE;ACCOUNTNUM;ACCOUNTLIB;ACCDOCLIB;DEBIT;CREDIT4;1012017;623477;TIDE SCHEDULE;ALNEENRE-4701-LOC;00000001615,00;4;1012017;445452;VAT BS /ENC;ALNEENRE-4701-LOC;00000000323,00;4;1012017;4356;DEBITI;ALNEENRE-4701-LOC;;00000001938,005;1012017;623372;GUIDA ALL'ALLOGGIO;ALNEENRE-4771-LOC;00000001333,00001333,00001333,00001333,00001333,00001333,0;1012017;445452;IVA BS/ENC;ALNEENRE-4771-LOC;00000000266,60;5;1012017;4356;DEBITI;ALNEENRE-4771-LOC;;00000001599,606;1012017;4356;DEBITI;FACT FA0000;;00000001837,206;1012017;445452;P.IVA BS/ENC;FACT FA00006253 - BIT QUIROBEN;00000000306,20;6;1012017;623795;GUIDA TURISTICA;FACT FA00006253 - BIT QUIROBEN;0150100,000000001 

Potresti conoscere quel formato di file come CSV (per valori separati da virgola), anche se il separatore di campo non è sempre una virgola. Ad esempio, il punto e virgola (; ) si incontra spesso come separatore di campo ed è spesso la scelta predefinita quando si esportano dati come "CSV" in paesi che già utilizzano la virgola come separatore decimale (come facciamo in Francia, da qui la scelta di quel carattere nel mio file di esempio ). Un'altra variante popolare utilizza un carattere di tabulazione come separatore di campo, producendo quello che a volte viene chiamato un file di valori separati da tabulazioni. Infine, nel mondo Unix e Linux, i due punti (: ) è un altro separatore di campo relativamente comune che potresti trovare, ad esempio, nello standard /etc/passwd e /etc/group file.

Quando si utilizza un formato di file di testo delimitato, si fornisce al comando taglia l'intervallo di campi per continuare a utilizzare il -f opzione e devi specificare il delimitatore usando il -d opzione (senza -d opzione, l'utilità di taglio per impostazione predefinita è un carattere di tabulazione per il separatore):

sh$ taglio -f 5- -d';' SALDO.csv | headACCDOCLIB;DEBIT;CREDITALNEENRE-4701-LOC;00000001615,00;ALNEENRE-4701-LOC;00000000323,00;ALNEENRE-4701-LOC;;00000001938,00ALNEENRE-4771-LOC;00000001333,00;ALNEENRE-0266RE-477 ,60;ALNEENRE-4771-LOC;;00000001599,60FACT FA00006253 - BIT QUIROBEN;;00000001837,20FACT FA00006253 - BIT QUIROBEN;00000000306,20;FACT FA00006253 - BIT QUIROBEN;01501;00,0001 

Righe di gestione che non contengono il delimitatore

Ma cosa succede se una riga nel file di input non contiene il delimitatore? Si è tentati di immaginarlo come una riga contenente solo il primo campo. Ma questo è non cosa fa l'utilità di taglio.

Per impostazione predefinita, quando si utilizza -f opzione, l'utilità di taglio emetterà sempre alla lettera una riga che non contiene il delimitatore (probabilmente supponendo che si tratti di una riga non di dati come un'intestazione o un commento di qualche tipo):

sh$ (echo "# 2018-03 BALANCE"; cat BALANCE.csv)> BALANCE-WITH-HEADER.csvsh$ cut -f 6,7 -d';' BILANCIO-CON-TESTA.csv | head -5# 2018-03 BALANCEDEBIT;CREDIT00000001615,00;00000000323,00;;00000001938,00 

Usando i -s opzione, puoi invertire quel comportamento, quindi taglia ignorerà sempre tale riga:

sh$ taglio -s -f 6,7 -d';' BILANCIO-CON-TESTA.csv | testa -5DEBIT;CREDIT00000001615,00;00000000323,00;;00000001938,0000000001333,00; 

Se sei di umore hacker, puoi sfruttare questa caratteristica come un modo relativamente oscuro per mantenere solo le righe contenenti un determinato carattere:

# Mantiene le righe contenenti un `e`sh$ printf "%s\n" {mighty,grassetto,great}-{condor,monkey,bear} | taglia -s -f 1- -d'e' 

Modifica del delimitatore di output

Come estensione, l'implementazione GNU di cut permette di usare un separatore di campo diverso per l'output usando il --output-delimiter opzione:

sh$ taglio -f 5,6- -d';' --output-delimiter="*" BALANCE.csv | headACCDOCLIB*DEBIT*CREDITALNEENRE-4701-LOC*00000001615,00*ALNEENRE-4701-LOC*00000000323,00*ALNEENRE-4701-LOC**00000001938,00ALNEENRE-4771-LOC*00000001333,00*ALNEENRE-606-4777 ,60*ALNEENRE-4771-LOC**00000001599,60FACT FA00006253 - BIT QUIROBEN**00000001837,20FACT FA00006253 - BIT QUIROBEN*00000000306,20*FACT FA00006253 - BIT QUIROBEN*013,000 

Si noti, in tal caso, tutte le occorrenze del separatore di campo vengono sostituite e non solo quelle al limite degli intervalli specificati negli argomenti della riga di comando.

4. Estensioni GNU non POSIX

Parlando di estensioni GNU non POSIX, un paio di esse possono essere particolarmente utili. Vale la pena ricordare che le seguenti estensioni funzionano ugualmente bene con byte, carattere (per cosa significa nell'attuale implementazione GNU) o intervalli di campi:--complement

Pensa a quell'opzione come il punto esclamativo in un indirizzo sed (! ); invece di mantenere i dati corrispondenti all'intervallo specificato, cut manterrà i dati NON corrispondenti all'intervallo

# Mantieni solo il campo 5sh$ cut -f 5 -d';' BALANCE.csv |head -3ACCDOCLIBALNEENRE-4701-LOCALNEENRE-4701-LOC# Mantieni tutto tranne il campo 5sh$ tagliato --complement -f 5 -d';' SALDO.csv |head -3ACCDOC;ACCDOCDATE;ACCOUNTNUM;ACCOUNTLIB;DEBIT;CREDIT4;1012017;623477;PROGRAMMA MAREA;00000001615,00;4;1012017;445452;IVA BS/ENC;00000000323,00; 

--zero terminato (-z )

utilizzare il carattere NUL come terminatore di riga anziché il carattere di nuova riga. Il -z L'opzione è particolarmente utile quando i dati possono contenere caratteri di nuova riga incorporati, come quando si lavora con i nomi di file (poiché la nuova riga è un carattere valido in un nome di file, ma NUL non lo è).

Per mostrarti come il -z l'opzione funziona, facciamo un piccolo esperimento. Per prima cosa creeremo un file il cui nome contiene nuove righe incorporate:

bash$ touch 

Supponiamo ora di voler visualizzare i primi 5 caratteri di ogni *.txt nome del file. Una soluzione ingenua fallirà miseramente qui:

sh$ ls -1 *.txt | cut -c 1-5BALANBALANEMPTYFILEWITHNAME. 

Potresti aver già letto ls è stato progettato per il consumo umano e utilizzarlo in una pipeline di comandi è un anti-modello (lo è infatti). Quindi usiamo il trova comando invece:

sh$ trova . -name '*.txt' -printf "%f\n" | cut -c 1-5BALANEMPTYFILEWITHNAME.BALAN 

e ... che ha prodotto sostanzialmente lo stesso risultato errato di prima (sebbene in un ordine diverso perché ls ordina implicitamente i nomi dei file, qualcosa che trova comando non funziona).

Il problema è in entrambi i casi, il taglio comando non può fare la distinzione tra un carattere di nuova riga che fa parte di un campo dati (il nome del file) e un carattere di nuova riga utilizzato come indicatore di fine record. Ma, usando il byte NUL (\0 ) poiché il terminatore di riga cancella la confusione in modo da poter finalmente ottenere il risultato atteso:

# Mi è stato detto (?) che alcune vecchie versioni di tr richiedono l'uso di \000 invece di \0# per denotare il carattere NUL (fammi sapere se hai bisogno di quella modifica!)sh$ find . -name '*.txt' -printf "%f\0" | taglia -z -c 1-5| tr '\0' '\n'BALANEMPTYBALAN 

Con quest'ultimo esempio, ci stiamo allontanando dal nucleo di questo articolo che era il cut comando. Quindi, ti lascerò provare a capire da solo il significato del funky "%f\0" dopo il -printf argomento del trova comando o perché ho usato il tr comando alla fine della pipeline.

Si può fare molto di più con il comando Taglia

Ho appena mostrato l'uso più comune e secondo me più essenziale del comando Taglia. Puoi applicare il comando in modi ancora più pratici. Dipende dal tuo ragionamento logico e dalla tua immaginazione.

Non esitare a utilizzare la sezione commenti qui sotto per pubblicare i tuoi risultati. E, come sempre, se questo articolo ti piace, non dimenticare di condividerlo sui tuoi siti Web e social preferiti!


Linux
  1. Comando Linux Cat:utilizzo ed esempi

  2. Il comando Sed di Linux:utilizzo ed esempi

  3. Comandi Linux:job, bg e fg

  4. Il comando AWK di Linux:esempi di sintassi di utilizzo di Linux e Unix

  5. 10 pratici esempi di comandi di taglio Linux per selezionare le colonne di file

50 Comando Linux Cut semplice e utile in Unix con esempi

40 Comando awk pratico e utile in Linux e BSD

50 Comando grep produttivo e pratico per gli appassionati di Linux

16 Esempi pratici e utili di Echo Command in Linux

7 Utilizzo essenziale e pratico del comando Incolla in Linux

Cat Command in Linux:esempi essenziali e avanzati