Linux cut命令與實際示例

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

在本教程中,您將學習Linux剪切命令,並提供一些日常命令行活動中可以使用的工作示例。

剪切命令和語法

cut命令的基本語法為:

cut OPTION... [FILE]...

讓我們檢查剪切選項。如果未指定任何選項,則cut命令將不起作用。

剪切選項

-f :指定字段並提取。 cut命令使用“ TAB”作為默認字段定界符。

-d :’Tab’是默認的定界符,此選項允許您使用特定的定界符。

-b :指定字節並提取。您還可以指定字節範圍。

-c :用字母剪開。它可以是逗號分隔的數字列表,也可以是由連字符(-)分隔的數字範圍。

–complement :這補充了選擇

–output-delimiter :要更改輸出定界符,請使用選項-output-delimiter =’delimiter’。

--only-delimited :剪切不打印沒有定界符的行

本教程使用以下名為“ content.txt”的文本文件和/ etc / passwd文件作為示例。

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

如何用定界符切割

最常用的切割選項是 -d-f。基本上,它基於特定的定界符和列出的字段提取內容。

例如,以下示例使用定界符(:)僅打印“ / etc / passwd”文件中每行的第一個字段。

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

下面的示例使用空格(“”)作為分隔符,從名為’content.txt’的文件中剪切第一個字段。

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

本示例從特定文件中提取多個字段。在這裡,我使用冒號(:)分隔符從文件“ / etc / passwd”中提取帶有字符串“ / 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 可選的。使用此選項時,它將選擇除指定字段之外的所有字段。

在以下示例中,該命令將打印/ 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

讓我們來看另一個例子。在這裡,我們使用輸出定界符來打印到新行的每個字段。

在這裡使用 --output-delimiter 所以 $’n’ 這表示換行。

檢查輸出。

$ grep root /etc/passwd | cut -d':' -f1,6,7 --output-delimiter=$'n'
root
/root
/bin/bash
operator
/root
/sbin/nologin

如何剪裁角色

-c (Column)選項用於按字符位置剪切。注意,“ TABS”和“空格”也被視為字符。

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

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

下面的示例在文件的每一行上顯示字符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 通過指定字節位置並用逗號(,)分隔的數字來選擇行的一部分的選項。您可以使用連字符指定字節範圍。

在以下示例中,從名為“ content.txt”的文件中剪切了第一,第二和第三字節。

$ 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

一些實用的裁剪示例

剪切最適合與各種Linux或Unix命令組合一起使用。

例如,假設您使用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-

讓我們看一下提取內存的“總計”,“已使用”,“空閑”值並使用多個命令將它們保存到文本文件的另一個示例。

$ 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命令才能獲得所需的輸出。

Sidebar