
V systémech Linux a Unix je k dispozici mnoho nástrojů, které umožňují zpracovávat a filtrovat textové soubory. cut
je nástroj příkazového řádku, který vám umožňuje vyjmout části čar ze zadaných souborů nebo dat z potrubí a vytisknout výsledek na standardní výstup. Lze jej použít k vyříznutí částí řádku podle oddělovače, pozice bajtu a znaku.
V tomto článku vám ukážeme, jak používat cut
pomocí praktických příkladů a podrobných vysvětlení nejběžnějších možností.
Jak používat cut
Příkaz #
Syntaxe pro cut
příkaz je následující:
cut OPTION... [FILE]...
Možnosti, které říkají cut
zda použít oddělovač, pozici bajtu nebo znak při vyřezávání vybraných částí, řádky jsou následující:
-f
(--fields=LIST
) - Vyberte zadáním pole, sady polí nebo rozsahu polí. Toto je nejčastěji používaná možnost.-b
(--bytes=LIST
) – Vyberte zadáním bajtu, sady bajtů nebo rozsahu bajtů.-c
(--characters=LIST
) – Vyberte zadáním znaku, sady znaků nebo rozsahu znaků.
Můžete použít jednu a pouze jednu z výše uvedených možností.
Další možnosti jsou:
-d
(--delimiter
) – Zadejte oddělovač, který bude použit namísto výchozího oddělovače „TAB“.--complement
- Doplňte výběr. Při použití této možnosticut
zobrazí všechny bajty, znaky nebo pole kromě vybraných.-s
(--only-delimited
) – Ve výchozím nastavenícut
vytiskne řádky, které neobsahují žádný oddělovací znak. Při použití této možnosticut
netiskne řádky neobsahující oddělovače.--output-delimiter
- Výchozí chovánícut
je použít vstupní oddělovač jako výstupní oddělovač. Tato možnost vám umožňuje zadat jiný řetězec oddělovače výstupu.
cut
příkaz může přijmout nula nebo více vstupních názvů SOUBORŮ. Pokud není FILE
je zadáno, nebo když FILE
je -
, cut
bude číst ze standardního vstupu.
LIST
argument předán do -f
, -b
a -c
možnosti mohou být celé číslo, více celých čísel oddělených čárkami, rozsah celých čísel nebo více rozsahů celých čísel oddělených čárkami. Každý rozsah může být jeden z následujících:
N
N-té pole, bajt nebo znak, počínaje 1.N-
od N-tého pole, bajtu nebo znaku, na konec řádku.N-M
z N-tého na M-té pole, bajt nebo znak.-M
od prvního do M-tého pole, bajtu nebo znaku.
Jak řezat podle pole #
Chcete-li zadat pole, která mají být vyříznuta, vyvolejte příkaz s -f
volba. Pokud není zadán, výchozí oddělovač je „TAB“.
V níže uvedených příkladech použijeme následující soubor. Pole jsou oddělena tabulátory.
test.txt245:789 4567 M:4540 Admin 01:10:1980
535:763 4987 M:3476 Sales 11:04:1978
Například pro zobrazení 1. a 3. pole byste použili:
cut test.txt -f 1,3
245:789 M:4540
535:763 M:3476
Nebo pokud chcete zobrazit od 1. do 4. pole:
cut test.txt -f -4
245:789 4567 M:4540 Admin
535:763 4987 M:3476 Sales
Jak stříhat na základě oddělovače #
Chcete-li řezat na základě oddělovače, vyvolejte příkaz s -d
následuje oddělovač, který chcete použít.
Chcete-li například zobrazit 1. a 3. pole pomocí „:“ jako oddělovače, zadejte:
cut test.txt -d ':' -f 1,3
245:4540 Admin 01
535:3476 Sales 11
Jako oddělovač můžete použít libovolný jednotlivý znak. V následujícím příkladu používáme jako oddělovač znak mezery a tiskneme 2. pole:
echo "Lorem ipsum dolor sit amet" | cut -d ' ' -f 2
ipsum
Jak doplnit výběr #
K doplnění seznamu polí výběru použijte --complement
volba. Tím se vytisknou pouze ta pole, která nejsou vybrána pomocí -f
možnost.
Následující příkaz vytiskne všechna pole kromě 1. a 3.:
cut test.txt -f 1,3 --complement
4567 Admin 01:10:1980
4987 Sales 11:04:1978
Jak určit výstupní oddělovač #
Chcete-li zadat oddělovač výstupu, použijte --output-delimiter
volba. Chcete-li například nastavit oddělovač výstupu na _
byste použili:
cut test.txt -f 1,3 --output-delimiter='_'
245:789_M:4540
535:763_M:3476
Jak vyjmout po bajtech a znacích #
Než půjdeme dále, udělejme rozdíl mezi bajty a znaky.
Jeden bajt má 8 bitů a může představovat 256 různých hodnot. Když byl zaveden standard ASCII, bral v úvahu všechna písmena, čísla a symboly nezbytné pro práci s angličtinou. Tabulka znaků ASCII má 128 znaků a každý znak představuje jeden bajt. Když se počítače začaly stávat globálně přístupnými, technologické společnosti začaly zavádět nová kódování znaků pro různé jazyky. U jazyků, které mají více než 256 znaků, nebylo jednoduché mapování 1:1 možné. To vede k různým problémům, jako je sdílení dokumentů nebo procházení webových stránek, a byl zapotřebí nový standard Unicode, který zvládne většinu světových systémů psaní. K vyřešení těchto problémů bylo vytvořeno UTF-8. V UTF-8 nejsou všechny znaky reprezentovány 1 bajtem. Znaky mohou být reprezentovány 1 až 4 bajty.
-b
(--bytes
) sděluje příkazu, aby vyřízl části z každého řádku určeného danými pozicemi bajtů.
V následujících příkladech používáme ü
znak, který trvá 2 bajty.
Vyberte 5. bajt:
echo 'drüberspringen' | cut -b 5
b
Vyberte 5., 9. a 13. bajt:
echo 'drüberspringen' | cut -b 5,9,13
bpg
Vyberte rozsah od 1. do 5. bajtu:
echo 'drüberspringen' | cut -b 1-5
drüb
V době psaní tohoto článku byla verze cut
svázaný v GNU coreutils nemá možnost řezu podle znaků. Při použití -c
možnost, cut
chová se stejně jako při použití -b
možnost.
Příklady vyjmutí #
cut
příkaz se obvykle používá v kombinaci s jinými příkazy prostřednictvím potrubí. Zde je několik příkladů:
Získat seznam všech uživatelů #
Výstup getent passwd
příkaz je předán do cut
, který vytiskne 1. pole pomocí :
jako oddělovač.
getent passwd | cut -d ':' -f1
Výstup zobrazuje seznam všech uživatelů systému.
Zobrazit 10 nejčastěji používaných příkazů #
V následujícím příkladu cut
se používá k odstranění prvních 8 bajtů z každého řádku history
výstup příkazu.
history | cut -c8- | sort | uniq -c | sort -rn | head
Závěr č.
cut
příkaz se používá k zobrazení vybraných polí z každého řádku daných souborů nebo standardního vstupu.
Ačkoli je to velmi užitečné, cut
má určitá omezení. Nepodporuje zadání více než jednoho znaku jako oddělovač a nepodporuje více oddělovačů.
Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.