Pro zpracování textu se používá Linux command cut. Tento příkaz můžete použít k extrahování části textu ze souboru výběrem sloupců.
Tento výukový program poskytuje několik praktických příkladů příkazu vyjmout, který můžete použít ve svých každodenních činnostech na příkazovém řádku.
Pro většinu příkladu budeme používat následující testovací soubor.
$ cat test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
1. Vyberte Sloupec znaků
Chcete-li ze souboru extrahovat pouze požadovaný sloupec, použijte volbu -c. Následující příklad zobrazuje 2. znak z každého řádku souboru test.txt
$ cut -c2 test.txt a p s
Jak je vidět výše, znaky a, p, s jsou druhým znakem z každého řádku souboru test.txt.
2. Vyberte Sloupec znaků pomocí Rozsah
Rozsah znaků lze také extrahovat ze souboru zadáním počáteční a koncové pozice oddělené znakem -. Následující příklad extrahuje první 3 znaky každého řádku ze souboru s názvem test.txt
$ cut -c1-3 test.txt cat cp ls
3. Vyberte Sloupec znaků pomocí Počáteční nebo Koncové pozice
Příkazu řez lze předat počáteční nebo koncovou polohu pomocí volby -c.
Následující text specifikuje pouze počáteční pozici před „-“. Tento příklad extrahuje od 3. znaku do konce každého řádku ze souboru test.txt.
$ cut -c3- test.txt t command for file oriented operations. command for copy files or directories. command to list out files and directories with its attributes.
Následující text určuje pouze koncovou polohu za znakem „-“. Tento příklad extrahuje 8 znaků ze začátku každého řádku ze souboru test.txt.
$ cut -c-8 test.txt cat comm cp comma ls comma
Pokud nezadáte číslo před nebo za „-“, jak je znázorněno níže, vytiskne se celý řádek.
$ cut -c- test.txt cat command for file oriented operations. cp command for copy files or directories. ls command to list out files and directories with its attributes.
4. Vyberte konkrétní pole ze souboru
Namísto výběru x počtu znaků, pokud chcete extrahovat celé pole, můžete kombinovat volbu -f a -d. Volba -f určuje, které pole chcete extrahovat, a volba -d určuje, jaký je oddělovač pole, který se používá ve vstupním souboru.
Následující příklad zobrazuje pouze první pole každého řádku ze souboru /etc/passwd pomocí oddělovače pole:(dvojtečka). V tomto případě je 1. pole uživatelské jméno. Soubor
$ cut -d':' -f1 /etc/passwd root daemon bin sys sync games bala
5. Vyberte více polí ze souboru
Můžete také extrahovat více než jedno pole ze souboru nebo stdout. Níže uvedený příklad zobrazuje uživatelské jméno a domovský adresář uživatelů, kteří mají přihlašovací shell „/bin/bash“.
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6 root:/root bala:/home/bala
Chcete-li zobrazit rozsah polí, zadejte počáteční pole a koncové pole, jak je znázorněno níže. V tomto příkladu vybíráme pole 1 až 4, 6 a 7
$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7 root:x:0:0:/root:/bin/bash bala:x:1000:1000:/home/bala:/bin/bash
6. Vyberte pole pouze v případě, že řádek obsahuje oddělovač
Pokud v našem příkladu /etc/passwd předáte jiný oddělovač než :(dvojtečka), cut zobrazí pouze celý řádek.
V následujícím příkladu jsme zadali oddělovač jako | (potrubí) a příkaz cut jednoduše zobrazí celý řádek, i když nenajde žádný řádek, který má | (potrubí) jako oddělovač.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -f1 root:x:0:0:root:/root:/bin/bash bala:x:1000:1000:bala,,,:/home/bala:/bin/bash
Je však možné filtrovat a zobrazovat pouze řádky, které obsahují zadaný oddělovač pomocí volby -s.
Následující příklad nezobrazuje žádný výstup, protože příkaz cut nenalezl žádné řádky, které mají | (pipe) jako oddělovač v souboru /etc/passwd.
$ grep "/bin/bash" /etc/passwd | cut -d'|' -s -f1
7. Vyberte všechna pole kromě zadaných polí
Pro doplnění seznamu výběrových polí použijte volbu –doplňte.
Následující příklad zobrazuje všechna pole ze souboru /etc/passwd kromě pole 7
$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -s -f7 root:x:0:0:root:/root bala:x:1000:1000:bala,,,:/home/bala
8. Změňte oddělovač výstupu pro zobrazení
Ve výchozím nastavení je výstupní oddělovač stejný jako vstupní oddělovač, který zadáváme ve volbě cut -d.
Chcete-li změnit výstupní oddělovač, použijte volbu –output-delimiter, jak je uvedeno níže. V tomto příkladu je vstupní oddělovač :(dvojtečka), ale výstupní oddělovač je # (hash).
$ grep "/bin/bash" /etc/passwd | cut -d':' -s -f1,6,7 --output-delimiter='#' root#/root#/bin/bash bala#/home/bala#/bin/bash
9. Změňte oddělovač výstupu na Nový řádek
V tomto příkladu je každé pole výstupu příkazu řezu zobrazeno na samostatném řádku. Stále jsme používali –output-delimiter, ale hodnota je $’\n’, což znamená, že bychom měli jako výstupní oddělovač přidat nový řádek.
$ grep bala /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'\n' bala /home/bala /bin/bash
10. Kombinujte Cut s jiným výstupem příkazu Unix
Sílu příkazu cut lze realizovat, když jej zkombinujete s nějakým jiným unixovým příkazem stdout.
Jakmile zvládnete základní použití příkazu vyjmout, které jsme vysvětlili výše, můžete moudře použít příkaz vyjmout k vyřešení mnoha požadavků na manipulaci s textem.
Následující příklad ukazuje, jak můžete z výstupu příkazu ps extrahovat pouze užitečné informace. Také jsme ukázali, jak jsme filtrovali výstup příkazu ps pomocí grep a sed, než byl dán konečný výstup příkazu cut. Zde jsme použili možnost vyjmout -d a -f, kterou jsme vysvětlili ve výše uvedených příkladech.
$ ps axu | grep python | sed 's/\s\+/ /g' | cut -d' ' -f2,11- 2231 /usr/bin/python /usr/lib/unity-lens-video/unity-lens-video 2311 /usr/bin/python /usr/lib/unity-scope-video-remote/unity-scope-video-remote 2414 /usr/bin/python /usr/lib/ubuntuone-client/ubuntuone-syncdaemon 2463 /usr/bin/python /usr/lib/system-service/system-service-d 3274 grep --color=auto python