cut命令在Linux和Unix中是从文件中的每一行截取一些部分输出到标准输出。我们可以使用剪切命令,从一行字符串中剪切出以字节、字符、字段(分隔符)等为单位的一部分内容。在这篇文章中,我们通过一些例子来了解cut命令的使用,这个命令在我们的日常工作中也是很常用的。剪切命令及语法剪切命令的基本语法如下:$cutOPTION...[FILE]...我们先了解一下剪切的一些选项。cut命令在执行前必须指定选项。-f:提取指定字段,cut命令默认使用Tab作为分隔符。-d:Tab是默认的分隔符,使用这个选项可以指定你自己的分隔符。-b:提取指定字节,也可以指定一个范围。-c:提取指定的字符,可以是逗号分隔的数字列表,也可以是连字符分隔的数字范围。--complement:对选中的部分进行补充,即反选。--output-delimiter:修改输出时使用的分隔符。--only-delimited:不输出不包含分隔符的列。下面以名为context.txt的文本文件和/etc/passwd文件为例进行说明。$catcontent.txtUbuntuLinuxMicrosoftWindowsOsXElCapitanUnixFreeBSD如何指定分隔符最常用的选项是-d和-f的组合,会根据-d指定的分隔符和-f列出的字段提取内容.例如本例只打印/etc/passwd文件每一行的第一个字段,使用的分隔符为:$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|排序|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选项来指定输出分隔符作为空格:$cut-d:-f1,7--output-delimiter''/etc/passwd|排序|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选项可以根据提取字符位置,注意空格和制表符也是按字符处理的。打印context.txt文件每一行的第一个字符,如下:$cut-c1content.txtUMOUF下面显示context.txt文件每一行的第一到第七个字符;$cut-c1-7content.txtUbuntuMicrosoOsXElUnixFreeBSD让我们通过仅指定开始或结束位置来再次测试。下面提取倒数第??二个字符:$cut-c2-content.txtbuntuLinuxicrosoftWindowssXElCapitannixreeBSD提取第一个到第四个字符:cut-c-4content.txtUbunMicroOsXUnixFree如何按字节提取通过指定字节位置使用-b选项要选择一行的一部分,请使用逗号分隔每个指定位置,或使用连字符-指定范围。以下示例提取content.txt文件中每一行的第一个、第二个和第三个字节:$cut-b1,2,3content.txtUbuMicOsXUniFre我们也可以使用以下命令列出一个范围;$cut-b1-3,5-7content.txtUbutuMicosoOsXElUniFreBSD一些实际例子cut是一个有用的命令,经常与其他Linux或Unix命令结合使用。例如,如果您想在ps命令中提取USER、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值内存,并将它们保存在文件中。$免费-m|tr-s''|sed'/^内存/!d'|cut-d""-f2-4>>memory.txt$catmemory.txt98586234总结cut命令可以与许多其他通过管道连接的Linux或Unix命令一起使用。可以通过管道传输一个或多个过滤器以进行额外的文本处理。cut命令的局限性之一是它不支持指定多个字符作为分隔符。多个空格被算作多个字段分隔符,因此必须在cut命令之前使用tr命令以获得所需的输出。最后,最近有很多朋友找我要一份Linux学习路线图,所以我结合自己的经验,利用业余时间熬夜一个月,整理了一本电子书。无论你是面试还是自我提升,相信都会对你有所帮助!免费送给大家,只求大家给我点个赞!电子书|LinuxDevelopmentLearningRoadmap也希望有小伙伴可以加入我的行列,把这本电子书做得更加完美!获得?希望老铁们来个三连击,让更多人看到这篇文章。推荐阅读:干货|程序员和高级架构师免费发送工件的必备资源|支持搜索的资源网站
