Příkaz Linux cut
V systému Unix – jako operační systémy, příkaz cut odstraní („vystřihne“) části každého řádku souboru nebo souborů.
Tento dokument popisuje verzi cutu v GNU / Linuxu.
Syntaxe
cut OPTION... ...
Možnosti
-b, –bytes = LIST | Vyberte pouze bajty z každého řádku, jak je uvedeno v SEZNAMU. LIST určuje bajt, sadu bajtů nebo rozsah bajtů; viz Zadání SEZNAMu níže. |
-c, –characters = LIST | Vyberte pouze znaky z každého řádku, jak je uvedeno v SEZNAMU. LIST specifikuje znak, sadu znaků nebo rozsah znaků; viz Zadání SEZNAMu níže. |
-d, –delimiter = DELIM | použijte znak DELIM namísto záložky pro oddělovač pole. |
-f, –fields = LIST | vyberte na každém řádku pouze tato pole; také vytiskněte jakýkoli řádek, který neobsahuje žádný oddělovací znak, pokud není zadána možnost -s. LIST specifikuje pole, sadu polí nebo rozsah polí; viz Zadání SEZNAMu níže. |
-n | Tato možnost je ignorována, ale je zahrnuta z důvodů kompatibility. |
–complement | doplňuje sadu vybraných bajtů, znaků nebo polí. |
-s, – pouze s oddělovači | netiskněte řádky, které neobsahují oddělovače. |
–output-delimiter = STRING | použijte jako řetězec oddělovače výstupu STRING. Výchozí nastavení je použít oddělovač vstupu. |
–help | Zobrazit zprávu nápovědy a ukončit. |
–version | výstupní informace o verzi a ukončení. |
poznámky k použití
Při vyvolání řezu použijte volbu -b, -c nebo -f, ale pouze jednu z nich.
Pokud není zadán žádný SOUBOR, řez bude čten ze standardního vstupu.
Zadání SEZNAMU
Každý SEZNAM je tvořen celým číslem, rozsahem celých čísel nebo více celočíselných rozsahů oddělených čárkami. Vybraný vstup se zapisuje ve stejném pořadí, v jakém se čte, a zapisuje se na výstup přesně jednou. Rozsah sestává z:
Řekněme například, že máte soubor s názvem data.txt, který obsahuje následující text:
onetwothreefourfivealphabetagammadeltaepsilon
V tomto příkladu je každé z těchto slov odděleno znakem tabulátoru, nikoli mezerami. Znak tabulátoru je výchozím oddělovačem ořezu, takže ve výchozím nastavení bude pole považováno za cokoli, co je oddělováno tabulátorem.
Chcete-li „vyjmout“ pouze třetí pole každého řádku, použijte příkaz:
cut -f 3 data.txt
…, jehož výstupem bude následující:
threegamma
Pokud místo toho chcete „vystřihnout“ pouze druhé až čtvrté pole každého řádku, použijte příkaz:
cut -f 2-4 data.txt
… které vygeneruje následující:
twothreefourbetagammadelta
Pokud chcete“ vyjmout „pouze první průchozí druhé a čtvrté až páté pole každého řádku (s vynecháním třetího pole), použijte příkaz:
cut -f 1-2,4-5 data.txt
… který vygeneruje následující:
onetwofourfivealphabetadeltaepsilon
Nebo vám řekněme chtít třetí pole a každé pole po něm, s vynecháním prvních dvou polí. V tomto případě můžete použít příkaz:
cut -f 3- data.txt
…, jehož výstupem bude následující:
threefourfivegammadeltaepsilon
Zadání rozsahu pomocí SEZNAMU platí také pro řezání znaků (-c) nebo bajtů (-b) z řádku. Chcete-li například vydat pouze třetí až dvanáctý znak každého řádku souboru data.txt, použijte příkaz:
cut -c 3-12 data.txt
…, který vypíše následující:
etwothrephabetag
Nezapomeňte, že „mezera“ mezi každým slovem je ve skutečnosti jeden znak tabulátoru, takže oba řádky výstupu zobrazují deset znaků: osm alfanumerické znaky a dva znaky tabulátoru. Jinými slovy, cut vynechává první dva znaky každého řádku a počítá tabulátory jako jeden znak; výstup znaků tři až dvanáct, počítání karet jako každý jeden znak; a vynechání jakýchkoli znaků po dvanácté.
Počítání bajtů místo znaků bude mít v tomto případě za následek stejný výstup, protože v textovém souboru kódovaném ASCII je každý znak reprezentován jedním bajtem (osm bitů ) údajů. Takže příkaz:
cut -b 3-12 data.txt
… vytvoří pro náš soubor data.txt přesně stejný výstup:
etwothrephabetag
Určení oddělovače jiného než karta
Znak karty je výchozí oddělovač, který řez použije k určení toho, co tvoří pole. Pokud jsou tedy pole vašeho souboru již odděleny tabulátory, není třeba specifikovat jiný oddělovací znak.
Jako oddělovač však můžete zadat libovolný znak.Například soubor / etc / passwd obsahuje informace o každém uživateli v systému, jednom uživateli na řádek a každé informační pole je ohraničeno dvojtečkou („:“). Například řádek / etc / passwd pro uživatele root může vypadat takto:
root:x:0:0:root:/root:/bin/bash
Tato pole obsahují následující informace v následujícím pořadí, oddělené dvojtečkou:
- Uživatelské jméno
- Heslo (při šifrování zobrazeno jako x)
- Číslo ID uživatele (UID)
- ID skupiny (GID)
- pole pro komentář (používané příkazem prstem)
- domovský adresář
- prostředí
Uživatelské jméno je první pole na řádku, takže pro zobrazení každého uživatelského jména v systému použijte příkaz:
cut -f 1 -d ":" /etc/passwd
… , například:
rootdaemonbinsyschope
(V typickém systému existuje mnohem více uživatelských účtů, včetně mnoha účtů specifických pro systémové služby, ale pro tento příklad budeme předstírat existuje pouze pět uživatelů.)
Třetím polem každého řádku v souboru / etc / passwd je UID (číslo ID uživatele), takže pro zobrazení každého uživatelského jména a čísla ID uživatele použijte příkaz:
… který bude mít například následující výstup:
root:0daemon:1bin:2sys:3chope:1000
Jak vidíte, výstup bude ve výchozím nastavení oddělený pomocí stejného oddělovacího znaku zadaného pro vstup. V tomto případě jde o znak dvojtečky („:“). Pro vstup a výstup však můžete zadat jiný oddělovač. Pokud jste tedy chtěli spustit předchozí příkaz, ale nechat výstup oddělit mezerou, můžete použít příkaz:
cut -f 1,3 -d ":" --output-delimiter=" " /etc/passwd
root 0daemon 1bin 2sys 3chope 1000
Ale co když chcete, aby byl výstup oddělen tabulátorem ? Zadání znaku tabulátoru na příkazovém řádku je trochu komplikovanější, protože se jedná o netisknutelný znak. Chcete-li jej zadat na příkazovém řádku, musíte jej „chránit“ před shellem. To se děje různě podle toho, který shell používáte “ znovu, ale ve výchozím prostředí Linuxu (bash) můžete určit znak karty pomocí $ „\ t“. Takže příkaz:
cut -f 1,3 -d ":" --output-delimiter=$"\t" /etc/passwd
… vydá například následující:
root0daemon1bin2sys3chope1000
Příklady
cut -c 3 file.txt
Výstup třetího znaku z každého řádku souboru file.txt bez ostatních.
cut -c 1-3 file.txt
Vypíše první tři znaky každého řádku souboru file.txt, zbytek vynechá.
cut -c -3 file.txt
Stejné jako výše uvedený příkaz. Výstup prvních tří znaků každého řádku file.txt.
cut -c 3- file.txt
Výstup třetího přes poslední znaky každého řádku souboru file.txt, s vynecháním první dva znaky.
cut -d ":" -f 1 /etc/passwd
Výstup prvního pole souboru / etc / passwd, kde jsou pole ohraničena dvojtečkou („:“). První pole / etc / passwd je uživatelské jméno, takže tento příkaz vygeneruje každé uživatelské jméno v souboru passwd.
grep "/bin/bash" /etc/passwd | cut -d ":" -f 1,6
Vypíše první a šesté pole, oddělený dvojtečkou jakéhokoli záznamu v souboru / etc / passwd, který jako přihlašovací shell určuje / bin / bash. Tento příkaz vygeneruje uživatelské jméno a domovský adresář každého uživatele, jehož přihlašovací shell je / bin / bash.