Linux Cut 命令與實際示例

cut 命令在 Linux 和 Unix 系統中用於從文件的每一行中剪切部分和節,並將結果寫入標準輸出。 它可用於按字節位置、字符和字段(分隔符)剪切行的一部分。

在本教程中,我們通過一些可以在日常命令行活動中使用的實際示例來學習 Linux cut 命令。

剪切命令和語法

cut命令的基本語法如下:

cut OPTION... [FILE]...

讓我們檢查剪切選項,如果沒有任何選項,剪切命令將不起作用。

剪切選項

-f : 通過指定字段提取。 剪切命令使用“TAB”作為默認字段分隔符。

-d : ‘Tab’ 是默認的分隔符,使用這個選項你可以使用特定的分隔符。

-b : 通過指定一個字節來提取。 也可以指定字節範圍。

-c : 按字符剪切。 這可以是由逗號分隔的數字列表或由連字符 (-) 分隔的數字範圍。

–complement :這將補充選擇

–output-delimiter :要更改輸出分隔符,請使用選項 -output-delimiter=”delimiter”。

--only-delimited : Cut 不會打印不包含分隔符的行

我們將在本教程中使用以下名為“content.txt”的文本文件和 /etc/passwd 文件來說明我們的示例。

$ cat content.txt
Ubuntu Linux
Microsoft Windows
OsX El Capitan
Unix
FreeBSD

如何通過分隔符剪切

最常用的剪切選項是 -d-f. 它基本上會根據特定的分隔符和列出的字段提取內容。

為了 example 以下使用分隔符 (:) 僅打印“/etc/passwd”文件中每行的第一個字段。

$ cut -d':' -f1 /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
...

下列 example 我們使用空格(“”)作為分隔符並從名為“content.txt”的文件中剪切第一個字段。

$ cut -d " " -f 1 content.txt
Ubuntu
Microsoft
OsX
Unix
FreeBSD

這 example, 從特定文件中提取多個字段。 在這裡,我們使用冒號 (:) 分隔符從文件 ‘/etc/passwd’ 中提取第 1 個和第 6 個字段,該文件具有字符串 ‘/bin/bash’:

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1,6
root:/root
slax:/home/slax

要顯示字段範圍,請指定用連字符 (-) 分隔的開始字段和結束字段,如下所示:

$ grep "/bin/bash" /etc/passwd | cut -d':' -f1-4,6,7
root:x:0:0:/root:/bin/bash
slax:x:1000:1000:/home/slax:/bin/bash

如何補充輸出選擇

要補充選擇字段列表,請使用 --complement 選項。 此選項用於在何處選擇除指定字段之外的所有字段。

在下面的 example 命令打印’/etc/passwd’文件中除第二個字段之外的所有字段:

$ grep "/bin/bash" /etc/passwd | cut -d':' --complement -f2
root:0:0:root:/root:/bin/bash

如何指定輸出分隔符

要指定輸出分隔符,請使用 --output-delimiter 選項。 輸入分隔符由 -d 選項,默認情況下輸出定界符與輸入定界符相同。

讓我們首先在不使用輸出分隔符的情況下檢查輸出,如下所示:

$ cut -d: -f1,7 /etc/passwd | sort | uniq -u
_apt:/usr/sbin/nologin
backup:/usr/sbin/nologin
bin:/usr/sbin/nologin
daemon:/usr/sbin/nologin
dnsmasq:/usr/sbin/nologin
games:/usr/sbin/nologin
gnats:/usr/sbin/nologin
irc:/usr/sbin/nologin
landscape:/usr/sbin/nologin
list:/usr/sbin/nologin
lp:/usr/sbin/nologin
lxd:/bin/false

現在我添加了 --output-delimiter 選項和輸入分隔符冒號 (:) 被替換為輸出分隔符“SPACE”,如下所示:

$ cut -d: -f1,7 --output-delimiter ' ' /etc/passwd | sort | uniq -u
_apt /usr/sbin/nologin
backup /usr/sbin/nologin
bin /usr/sbin/nologin
daemon /usr/sbin/nologin
dnsmasq /usr/sbin/nologin
games /usr/sbin/nologin
gnats /usr/sbin/nologin
irc /usr/sbin/nologin
landscape /usr/sbin/nologin
list /usr/sbin/nologin
lp /usr/sbin/nologin
lxd /bin/false

讓我們檢查另一個 example,這裡我們使用輸出分隔符在新行中的每個字段上打印。

這裡我們使用 --output-delimiter 作為 $’n’ 這表示一個新行。

檢查輸出:

$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=

如何按 c 切割字符

-c (column) 選項用於按字符位置切割。 請記住,“TABS”和“空格”也被視為字符。

要從名為 content.txt 的文件中的每一行打印第一個字符,請使用以下命令:

$ cut -c 1 content.txt
U
M
O
U
F

在下面的 example 我們將顯示文件中每一行的字符 1 到 7(範圍):

$ cut -c 1-7 content.txt
Ubuntu
Microso
OsX El
Unix
FreeBSD

讓我們來看看如何通過特定的開始或結束位置來選擇列。

將列從第二個字符提取到最後一個字符:

$ cut -c2- content.txt
buntu Linux
icrosoft Windows
sX El Capitan
nix
reeBSD

將列從第 1 個字符提取到第 4 個字符:

cut -c-4 content.txt
Ubun
Micr
OsX
Unix
Free

如何按字節切割

使用 -b 通過用逗號 (,) 分隔的數字指定字節位置來選擇行的一部分的選項。 使用連字符可以指定一個字節範圍。

下列 example 從名為“content.txt”的文件中截取第 1、2 和 3 個字節:

$ cut -b 1,2,3 content.txt
Ubu
Mic
OsX
Uni
Fre

我們還可以使用以下命令列出範圍:

$ cut -b 1-3,5-7 content.txt
Ubutu
Micoso
OsXEl
Uni
FreBSD

一些實際的切割示例

Cut 與不同的 Linux 或 Unix 命令組合使用最為實用。

為了 example,您想使用 ps 命令提取“USER”、“PID”和“COMMAND”:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
USER PID COMMAND
0 676 /sbin/agetty -o -p -- u --keep-baud 115200,38400,9600 ttyS0 vt220
0 681 /sbin/agetty -o -p -- u --noclear tty1 linux
0 23174 -bash
0 26737 ps -L u n
0 26738 tr -s
0 26739 cut -d -f 2,3,14-

讓我們再來一個 example 提取內存的“total”、“used”和“free”值並使用多個命令保存到文本文件:

$ free -m | tr -s ' ' | sed '/^Mem/!d' | cut -d" " -f2-4 >> memory.txt
Output
$ cat memory.txt
985 86 234

結論

cut 命令可以與許多其他 Linux 或 Unix 命令一起使用。 它可以通過一個或多個過濾器進行管道傳輸以進行額外的文本處理。

cut 命令的局限性之一是它不支持指定多個字符作為分隔符。 多個空白被視為多個字段分隔符,並且必須在剪切之前使用 tr 命令才能獲得所需的輸出。

n' root /root /bin/bash operator /root /sbin/nologin

如何按 c 切割字符

-c (column) 選項用於按字符位置切割。 請記住,“TABS”和“空格”也被視為字符。

要從名為 content.txt 的文件中的每一行打印第一個字符,請使用以下命令:

在下面的 example 我們將顯示文件中每一行的字符 1 到 7(範圍):

讓我們來看看如何通過特定的開始或結束位置來選擇列。

將列從第二個字符提取到最後一個字符:

將列從第 1 個字符提取到第 4 個字符:

如何按字節切割

使用 -b 通過用逗號 (,) 分隔的數字指定字節位置來選擇行的一部分的選項。 使用連字符可以指定一個字節範圍。

下列 example 從名為“content.txt”的文件中截取第 1、2 和 3 個字節:

我們還可以使用以下命令列出範圍:

一些實際的切割示例

Cut 與不同的 Linux 或 Unix 命令組合使用最為實用。

為了 example,您想使用 ps 命令提取“USER”、“PID”和“COMMAND”:

讓我們再來一個 example 提取內存的“total”、“used”和“free”值並使用多個命令保存到文本文件:

結論

cut 命令可以與許多其他 Linux 或 Unix 命令一起使用。 它可以通過一個或多個過濾器進行管道傳輸以進行額外的文本處理。

cut 命令的局限性之一是它不支持指定多個字符作為分隔符。 多個空白被視為多個字段分隔符,並且必須在剪切之前使用 tr 命令才能獲得所需的輸出。