Úvod
cut
command je nástroj příkazového řádku, který vám umožňuje vyjmout části zadaného souboru nebo dat z potrubí a vytisknout výsledek na standardní výstup. Příkaz ořízne části řádku podle pole, oddělovače, pozice bajtu a znaku.
V tomto tutoriálu se dozvíte, co je cut
příkaz je a jak jej používat.
Předpoklady
- Systém se systémem Linux.
- Přístup k terminálu.
cut Syntaxe příkazu
cut
příkaz má následující syntaxi:
cut [option] [file]
Možnosti
Zadání [option]
je nutné. V opačném případě příkaz vydá chybu. Dostupné možnosti jsou popsány v následující části.
Soubor
Pro [file]
, zadejte název souboru, který chcete zpracovat. Pokud nezadáte název souboru, příkaz cut
příkaz ke čtení ze standardního vstupu, v takovém případě cut
filtruje potrubí. Pokud zadáte více názvů souborů, cut
příkaz zřetězí požadovaný obsah.
vyjmout možnosti příkazu
cut
volby příkazu poskytují pokyny k použití oddělovače, ořezávání podle pozice bajtu, pole nebo znaku. Pro každý cut
použijte jednu možnost příkaz, který spustíte.
Dostupné možnosti jsou:
Možnost | Popis |
---|---|
-f (--fields=LIST) | Vyberte pomocí zadaného pole, sady polí nebo rozsahu polí. |
-b (--bytes=LIST) | Vyberte pomocí zadaného bajtu, sady bajtů nebo rozsahu bajtů. |
-c (--characters=LIST) | Vyberte pomocí zadaného znaku, znakové sady nebo rozsahu znaků. |
-d (--delimiter) | Slouží k určení oddělovače, který se má použít namísto výchozího oddělovače TAB. |
--complement | Pokud je tato možnost zadaná, dává pokyn cut pro zobrazení všech bajtů, znaků nebo polí kromě vybraných. |
-s (--only-delimited) | Výchozí nastavení je tisknout řádky, které neobsahují oddělovací znaky. Určení -s volba dává pokyn cut, aby netiskl řádky, které neobsahují oddělovače. |
--output-delimiter | Ve výchozím nastavení cut používá vstupní oddělovač jako výstupní oddělovač. Určení --output-delimiter umožňuje zadat jiný oddělovač výstupu. |
-f
, b
a -c
možnosti přebírají LIST
argument, který je jedním z následujících:
- Celé číslo
N
představující bajt, pole nebo znak počínaje 1. - Více celých čísel oddělených čárkami.
- Rozsah celých čísel.
- Více rozsahů celých čísel, oddělených čárkami.
Každý rozsah může být jeden z následujících:
N-
- Začíná od celého číslaN
(pole, bajt nebo znak) až do konce řádku.N-M
- Z celého číslaN
až po celé čísloM
včetně.-M
- Od prvního pole, bajtu nebo znaku až po zadanéM
pole, bajt nebo znak.
Příklady řezu Linuxu
Níže jsou uvedeny nejběžnější cut
případy použití příkazů.
Důležité: Věnujte pozornost národnímu prostředí souboru/příkazového výstupu, který zpracováváte. Ořezávání znaků nebo bajtů v jiném jazyce než angličtině může vést k nesprávnému výstupu, pokud je dotyčný znak delší než jeden bajt.
Vyjmout po bajtech
-b
umožňuje extrahovat data pomocí bajtů. Syntaxe je:
cut -b [LIST] [file]
[LIST]
argument jsou bajty, které se mají extrahovat z každého řádku [file]
.
V závislosti na tom, co chcete extrahovat, můžete vyjmout jeden bajt, více bajtů nebo rozsah bajtů. Chcete-li vyjmout z určitého souboru, zadejte název souboru na konci příkazu. Použijeme například employees.txt pro testování:
Chcete-li extrahovat první bajt z každého vstupního řádku, spusťte:
cut -b 1 employees.txt
Příkaz vytiskne pouze první bajt z každého vstupního řádku souboru.
Následující příklad ukazuje, jak vstoupit do příkazu who a extrahovat prvních 5 bajtů z výstupu:
who | cut -b -5
Vyjmout podle znaků
Chcete-li ořezat podle znaků, zadejte -c
volba. Řezání po znacích je podobné ořezávání po bytech, s tím rozdílem, že je potřeba zadat pozici znaku spíše než pozici bajtu. Syntaxe je:
cut -c [LIST] [file]
[LIST]
argument určuje znaky, které mají být extrahovány z každého řádku [file]
.
Například:
cut -c 10- employees.txt
Příkaz extrahuje vše od znaku 10 až do konce řádku z každého řádku souboru employees.txt . Výsledky jsou vytištěny standardním výstupem.
Následující příklad ukazuje výsledek, když soubor není zadán a cut
čte svůj vstup ze standardního vstupu. Podívejte se na who
výstup příkazu:
Výstup indikuje, že je aktuálně přihlášen jeden uživatel. Použijte cut
příkaz k extrahování uživatelského jména přihlášeného uživatele z who
výstup příkazu:
who | cut -c 1-8
Ve výše uvedeném příkladu dáváme pokyn cut
extrahovat znaky 1 až 8 z každého řádku vstupu. V případě více výsledků seřaďte výsledky připojením příkazu s | sort
.
Dále použijte cut
extrahovat více různých znaků z řádku. Například zobrazit uživatelské jméno a čas přihlášení všech přihlášených uživatelů:
who | cut -c 1-8,18-
Vyjmout na základě oddělovače
Pokud pole nejsou oddělena výchozím znakem tabulátoru, použijte -d
možnost zadat jiný oddělovač. To znamená, že znak zadaný za -d
volba je považována za oddělovač v řádcích. Syntaxe je:
cut -d[delimiter] [file]
Místo [delimiter]
argument, zadejte požadovaný oddělovač. Jako oddělovač můžete použít jakýkoli znak. Pomocí cut
příkaz k extrahování polí ze souboru bez zadání -d
znamená, že výchozím oddělovačem je znak tabulátoru .
V následujícím příkladu použijeme mezery jako oddělovač a vytiskneme druhé pole:
echo "phoenixNAP is a global IT services provider" | cut -d ' ' -f 2
Vyjmout podle polí
Při propojení do příkazů, jejichž výstup nemá pevný formát (např. who
příkaz), -c
možnost není užitečná. Pomocí -f
možnost oddělení podle polí je v takovém případě lepší volbou.
Například:
cut -f 2 employees.txt
Ve výše uvedeném příkladu jsme použili -f
možnost extrahovat druhé pole ze souboru employees.txt soubor.
Chcete-li ze souboru vyjmout konkrétní pole, zadejte jiný oddělovač. Například /etc/passwd
výstup souboru obsahuje všechny uživatele ve vašem systému, identifikační čísla, domovský adresář atd.
Data v /etc/passwd
soubor není zarovnán stejným způsobem jako data v who
příkazový výstup. Nemůžete tedy extrahovat všechny uživatele v systému spoléháním se na číslo znaku.
Pole v souboru /etc/passwd
soubory jsou odděleny dvojtečkou. Proto spočítejte počet dvojteček, abyste extrahovali stejná pole. Například:
cut -d: -f1,6 /etc/passwd
Výstup vrátí každého uživatele v systému a jeho domovský adresář odpovídající polím 1 a 6.
Doplňte výběr
--complement
volba vytiskne vše kromě znaku/bajtu/pole na zadané pozici. Například následující příkaz vytiskne všechna pole kromě prvního a třetího:
cut employees.txt -f 1 --complement
Zadejte oddělovač výstupu
Při zadávání více znaků/bajtů/polí cut
příkaz zřetězí výstup bez oddělovače. Zadejte oddělovač ve výstupu pomocí --output-delimiter
volba.
Chcete-li například nastavit oddělovač výstupu na _
(podtržítko), použijte:
cut employees.txt -f 1,3 --output-delimiter='_'