cut命令Linux和Unix中的作用是从文件中的每一行中截取出一些部份linux剪切命令,并输出到标准输出中。我们可以使用cut命令从一行字符串中于以字节,字符,数组(分隔符)等单位截取一部份内容下来。

在本文中,我们通过一些事例来了解cut命令的使用,这种使用方式在我们的日常工作中也是十分常用的。

Cut命令和句型

cut命令的基本句型如下:

$cutOPTION……

我们先来了解一下cut的一些选项,cut命令必需要指定选项才会执行。

-f:提取指定的数组,cut命令使用Tab作为默认的分隔符。

-d:Tab是默认的分隔符,使用这一选项可以指定自己的分隔符。

-b:提取指定的字节linux安全加固,也可以指定一个范围。

-c:提取指定的字符,可以是以冒号分隔的数字的列表,也可以是以连字符分隔的数字的范围。

–complement:补充选中的部份,即反选。

linux剪切命令_Linux cut命令使用教程_cut命令语法详解

–output-delimiter:更改输出时使用的分隔符。

--only-delimited:不输出不包含分隔符的列。

我们以如下的名为context.txt的文本文件和/etc/passwd文件来为例来进行说明。

$catcontent.txtUbuntuLinuxMicrosoftWindowsOsXElCapitanUnixFreeBSD

怎么指定分隔符

最常用的选项是-d和-f的组合,这会按照-d指定的分隔符和-f列举的数组来提取内容。

比如在这个反例中只复印出/etc/passwd文件每一行的第一个数组linux 下载,用的分隔符是:

$cut-d’:’-f1/etc/passwdrootbindaemonadmlpsyncshutdownhaltmailoperatorgamesalvinliangxu…

在下边这个反例中我们用空格作为分隔符复印content.txt文件的第一个数组

$cut-d””-f1content.txtUbuntuMicrosoftOsXUnixFreeBSD

在下边这个反例中我们提取了多个数组。这儿,我们使用逗号(:)分隔符从文件/etc/passwd中包含字符串/bin/bash的行提取第一和第六个数组。

$grep”/bin/bash”/etc/passwd|cut-d’:’-f1,6root:/rootalvin:/home/alvin

要显示数组的某个范围,可以指定开始和结束的数组,中间用连字符(-)联接,如下所示:

$grep”/bin/bash”/etc/passwd|cut-d’:’-f1-4,6,7root:x:0:0:/root:/bin/bashalvin:x:1000:1000:/home/alvin:/bin/bash

怎么补全选择的输出

要补全选择输出的数组(即反选),使用--complement选项。这一选项输出所有的数组,不仅指定的数组。

在下边这个反例中输出/etc/passwd文件中包含/bin/bash的行中不仅第二个数组以外的所有数组:

$grep”/bin/bash”/etc/passwd|cut-d’:’--complement-f2root:0:0:root:/root:/bin/bash

怎么指定输出的分隔符

使用--output-delimiter可以指定输出的分隔符。输入的分隔符由-d来指定,而输出分隔符和输入分隔符默认是一样的。

我们先以下边的反例来测试不指定输出分隔符时的输出;

$cut-d:-f1,7/etc/passwd|sort|uniq-u_apt:/usr/sbin/nologinbackup:/usr/sbin/nologinbin:/usr/sbin/nologindaemon:/usr/sbin/nologindnsmasq:/usr/sbin/nologingames:/usr/sbin/nologingnats:/usr/sbin/nologinirc:/usr/sbin/nologinlandscape:/usr/sbin/nologinlist:/usr/sbin/nologinlp:/usr/sbin/nologinlxd:/bin/false

Linux cut命令使用教程_linux剪切命令_cut命令语法详解

如今我们加上--output-delimiter选项,将输出分隔符指定为空格:

$cut-d:-f1,7--output-delimiter”/etc/passwd|sort|uniq-u_apt/usr/sbin/nologinbackup/usr/sbin/nologinbin/usr/sbin/nologindaemon/usr/sbin/nologindnsmasq/usr/sbin/nologingames/usr/sbin/nologingnats/usr/sbin/nologinirc/usr/sbin/nologinlandscape/usr/sbin/nologinlist/usr/sbin/nologinlp/usr/sbin/nologinlxd/bin/false

我们再测试一个反例,用分隔符让每一行复印一个数组。

我们将--output-delimiter指定为$’n’表换行。

输出结果为:

$greproot/etc/passwd|cut-d’:’-f1,6,7--output-delimiter=$’n’root/root/bin/bashoperator/root/sbin/nologin

如何以字符的方法提取内容

-c选项可以拿来按照字符位置进行提取,注意空格和Tab也以字符来处理。

复印context.txt文件每一行的第一个字符,如下:

$cut-c1content.txtUMOUF

下边显示了context.txt文件每一行的第一至七个字符;

linux剪切命令_cut命令语法详解_Linux cut命令使用教程

$cut-c1-7content.txtUbuntuMicrosoOsXElUnixFreeBSD

我们再测试一下只指定开始或结束的位置。

下边提取第二个到最后一个字符:

$cut-c2-content.txtbuntuLinuxicrosoftWindowssXElCapitannixreeBSD

提取第一到第四个字符:

cut-c-4content.txtUbunMicrOsXUnixFree

怎么按照字节提取

使用-b选项通过指定字节的位置来选择一行的某一部份,使用冒号分隔每位指定位置,或用连字符-指定一个范围。

下边这个事例提取content.txt文件每一行的第一,二,三个字节:

$cut-b1,2,3content.txtUbuMicOsXUniFre

我们也可以用如下命令列举一个范围;

$cut-b1-3,5-7content.txtUbutuMicosoOsXElUniFreBSD

一些实用的事例

cut是一个实用的命令,经常和其他Linux或Unix命令结合使用。

比如假如你想提取ps命令中的USERlinux剪切命令,PID和COMMAND:

ps-Lun|tr-s””|cut-d””-f2,3,14-USERPIDCOMMAND0676/sbin/agetty-o-p--u--keep-baud115200,38400,9600ttyS0vt2200681/sbin/agetty-o-p--u--nocleartty1linux023174-bash026737ps-Lun026738tr-s026739cut-d-f2,3,14-

再测试一个反例,提取显存的total,used和free值,并保存到一个文件中。

$free-m|tr-s”|sed’/^Mem/!d’|cut-d””-f2-4>>memory.txt$catmemory.txt98586234

总结

cut命令可以和好多其他Linux或Unix命令通过管路联接。可以通过管路传递一个或多个过滤器进行额外的文本处理。

cut命令的局限性之一是它不支持指定多个字符作为分隔符。多个空格会被估算为多个数组分隔符,因而必须在cut命令前使用tr命令能够获得须要的输出。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复