Příkaz Linux cut

Aktualizováno: 5. 4. 2019 Computer Hope

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:

  1. Uživatelské jméno
  2. Heslo (při šifrování zobrazeno jako x)
  3. Číslo ID uživatele (UID)
  4. ID skupiny (GID)
  5. pole pro komentář (používané příkazem prstem)
  6. domovský adresář
  7. 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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *