Introduzione
Il cut
command è un'utilità della riga di comando che consente di ritagliare sezioni di un file specificato o di dati inviati tramite pipe e di stampare il risultato sull'output standard. Il comando taglia parti di una riga per campo, delimitatore, posizione byte e carattere.
In questo tutorial imparerai cosa il cut
comando è e come usarlo.
Prerequisiti
- Un sistema che esegue Linux.
- Accesso a un terminale.
Taglia la sintassi dei comandi
Il cut
il comando accetta la seguente sintassi:
cut [option] [file]
Opzioni
Specificando un [option]
è necessario. In caso contrario, il comando genera un errore. Le opzioni disponibili sono descritte nella sezione seguente.
Archivio
Per [file]
, inserisci il nome del file che desideri elaborare. La mancata indicazione di un nome file indica il cut
comando da leggere dallo standard input, nel qual caso cut
filtra la condotta. Se specifichi più nomi di file, il cut
comando concatena il contenuto richiesto.
Opzioni comando taglia
Il cut
le opzioni del comando forniscono istruzioni sull'uso di un delimitatore, sul taglio in base alla posizione del byte, al campo o al carattere. Utilizza un'unica opzione per ogni cut
comando che esegui.
Le opzioni disponibili sono:
Opzione | Descrizione |
---|---|
-f (--fields=LIST) | Seleziona utilizzando un campo specifico, un set di campi o un intervallo di campi. |
-b (--bytes=LIST) | Selezionare utilizzando un byte specificato, un set di byte o un intervallo di byte. |
-c (--characters=LIST) | Selezionare utilizzando un carattere specificato, un set di caratteri o un intervallo di caratteri. |
-d (--delimiter) | Utilizzato per specificare un delimitatore da utilizzare al posto del delimitatore TAB predefinito. |
--complement | Quando specificata, questa opzione indica cut per visualizzare tutti i byte, i caratteri oi campi, eccetto quelli selezionati. |
-s (--only-delimited) | L'impostazione predefinita è stampare le righe che non contengono caratteri delimitatori. Specificando il -s l'opzione indica a cut di non stampare le righe che non contengono delimitatori. |
--output-delimiter | Per impostazione predefinita, cut usa il delimitatore di input come delimitatore di output. Specificando il --output-delimiter l'opzione consente di specificare un delimitatore di output diverso. |
Il -f
, b
e -c
le opzioni prendono il LIST
argomento, che è uno dei seguenti:
- Un numero intero
N
che rappresenta un byte, campo o carattere, a partire da 1. - Più numeri interi, separati da virgole.
- Un intervallo di numeri interi.
- Più intervalli di interi, separati da virgole.
Ciascun intervallo può essere uno dei seguenti:
N-
- Inizia dal numero interoN
(campo, byte o carattere) fino alla fine della riga.N-M
- Dal numero interoN
fino al numero interoM
, compreso.-M
- Dal primo campo, byte o carattere, fino alM
specificato campo, byte o carattere.
Esempi di taglio Linux
Di seguito sono riportati i cut
più comuni casi d'uso dei comandi.
Importante: Presta attenzione alla localizzazione del file/dell'output del comando che stai elaborando. Il taglio di caratteri o byte in una lingua diversa dall'inglese può produrre un output errato se il carattere in questione è più lungo di un byte.
Taglio per byte
Il -b
l'opzione consente di estrarre i dati utilizzando i byte. La sintassi è:
cut -b [LIST] [file]
Il [LIST]
argomento sono i byte da estrarre da ogni riga di [file]
.
A seconda di cosa vuoi estrarre, puoi tagliare un singolo byte, più byte o un intervallo di byte. Per tagliare da un file specifico, specifica il nome del file alla fine del comando. Ad esempio, utilizzeremo employees.txt per il test:
Per estrarre il primo byte da ogni riga di input, esegui:
cut -b 1 employees.txt
Il comando stampa solo il primo byte da ogni riga di input del file.
L'esempio seguente mostra come reindirizzare il comando who ed estrarre i primi 5 byte dall'output:
who | cut -b -5
Taglio per personaggi
Per tagliare per caratteri, specifica il -c
opzione. Il taglio per caratteri è simile al taglio per byte, tranne per il fatto che è necessario specificare la posizione del carattere anziché la posizione del byte. La sintassi è:
cut -c [LIST] [file]
Il [LIST]
argomento specifica i caratteri da estrarre da ogni riga di [file]
.
Ad esempio:
cut -c 10- employees.txt
Il comando estrae tutto dal carattere 10 fino alla fine della riga da ciascuna riga di employees.txt . I risultati vengono stampati in output standard.
L'esempio seguente mostra il risultato quando un file non è specificato e cut
legge il suo input dallo standard input. Dai un'occhiata al who
output del comando:
L'output indica che un utente è attualmente connesso. Usa il cut
comando per estrarre il nome utente dell'utente che ha effettuato l'accesso dal who
output del comando:
who | cut -c 1-8
Nell'esempio sopra, indichiamo cut
per estrarre i caratteri da 1 a 8 da ciascuna riga di input. In caso di più risultati, ordina i risultati aggiungendo al comando | sort
.
Inoltre, usa cut
per estrarre più caratteri diversi da una riga. Ad esempio, visualizza il nome utente e l'ora di accesso di tutti gli utenti che hanno effettuato l'accesso:
who | cut -c 1-8,18-
Taglia in base a un delimitatore
Se i campi non sono separati dal carattere di tabulazione predefinito, utilizza il -d
opzione per specificare un delimitatore diverso. Ciò significa che il carattere specificato dopo il -d
opzione è considerata il separatore nelle righe. La sintassi è:
cut -d[delimiter] [file]
Al posto del [delimiter]
argomento, specificare il delimitatore desiderato. Puoi usare qualsiasi carattere come delimitatore. Usando il cut
comando per estrarre i campi da un file senza specificare il -d
opzione significa che il delimitatore predefinito è il carattere di tabulazione .
Nell'esempio seguente, utilizziamo lo spazio bianco come delimitatore e stampiamo il secondo campo:
echo "phoenixNAP is a global IT services provider" | cut -d ' ' -f 2
Taglio per campi
Quando si esegue il pipe in comandi il cui output non ha un formato fisso (ad esempio, il who
comando), il -c
l'opzione non è utile. Usando il -f
l'opzione per separare per campi è una scelta migliore in questo caso.
Ad esempio:
cut -f 2 employees.txt
Nell'esempio sopra, abbiamo usato il -f
opzione per estrarre il secondo campo da employees.txt file.
Per tagliare campi specifici da un file, specificare un delimitatore diverso. Ad esempio, il /etc/passwd
l'output del file contiene tutti gli utenti del sistema, i numeri ID, la directory home, ecc.
I dati nel /etc/passwd
il file non è allineato allo stesso modo dei dati nel who
uscita del comando. Pertanto, non è possibile estrarre tutti gli utenti del sistema basandosi sul numero del carattere.
Tuttavia, i campi in /etc/passwd
file sono delimitati da due punti. Quindi, conta il numero di due punti per estrarre gli stessi campi. Ad esempio:
cut -d: -f1,6 /etc/passwd
L'output restituisce ogni utente nel sistema e la sua home directory, corrispondenti rispettivamente ai campi 1 e 6.
Completa una selezione
Il --complement
l'opzione stampa tutto tranne il carattere/byte/campo nella posizione specificata. Ad esempio, il comando seguente stampa tutti i campi tranne il primo e il terzo:
cut employees.txt -f 1 --complement
Specifica un delimitatore di output
Quando si specificano più caratteri/byte/campi, il cut
comando concatena l'output senza un delimitatore. Specifica un delimitatore nell'output utilizzando il --output-delimiter
opzione.
Ad esempio, per impostare il delimitatore di output su _
(sottolineatura), usa:
cut employees.txt -f 1,3 --output-delimiter='_'