A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
cuts out
],连接文件并打印到标准输出设备上。
-bash: cut: command not found #Debian apt-get install coreutils #Ubuntu apt-get install coreutils #Alpine apk add coreutils #Arch Linux pacman -S coreutils #Kali Linux apt-get install coreutils #CentOS yum install coreutils #Fedora dnf install coreutils #OS X brew install coreutils #Raspbian apt-get install coreutils #Docker docker run cmd.cat/cut cut
cut 命令用来显示行中的指定部分,删除文件中指定字段。cut 经常用来显示文件的内容,类似于 type
命令。
说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file
所指明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如 cut fl f2 > f3
将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符 > 的作用,将它们放入文件 f3 中。
当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用 more
等命令分屏显示。为了控制滚屏,可以按 Ctrl + S 键,停止滚屏;按 Ctrl + Q 键可以恢复滚屏。按 Ctrl + C(中断)键可以终止该命令的执行,并且返回 Shell
提示符状态。
cut OPTION... [FILE]...
-b, --bytes=LIST:仅显示行中指定直接范围的内容; -c, --characters=LIST:仅显示行中指定范围的字符; -d, --delimiter=DELIM:指定字段的分隔符,默认的字段分隔符为“TAB”; -f, --fields=LIST:显示指定字段的内容; -n:与“-b”选项连用,不分割多字节字符; --complement:补足被选择的字节、字符或字段; -s, --only-delimited:不要打印不包含定界符的行。 --out-delimiter= 字段分隔符:指定输出内容是的字段分割符; --help:显示指令的帮助信息; --version:显示指令的版本信息。
文件:指定要进行内容过滤的文件。
调用 cut 时,请使用 -b,-c 或 -f 选项,但只能使用其中之一。如果未指定 FILE
,则 cut 从标准输入中读取。
每个 LIST
由一个整数、一个整数范围或多个以逗号分隔的整数范围组成。 所选输入的写入顺序与读取时的写入顺序相同,并且写入后仅输出一次。 范围包括:
范围 | 描述 |
---|---|
N | 从 1 开始计数的第 N 个字节,字符或字段。 |
N- | 从第 N 个字节,字符或字段到行的末尾。 |
N-M | 从第 N 个到第 M 个字节,字符或字段(含)。 |
-M | 从第一个到第 M 个字节,字符或字段。 |
例如,假设您有一个名为 data.txt
的文件,其中包含以下文本:
one two three four five alpha beta gamma delta epsilon
在此示例中,这些单词中的每个单词都由制表符而不是空格分隔。 制表符是默认的 cut 分隔符,因此默认情况下它将认为字段是由制表符分隔的任何内容。
要仅“剪切”每行的第三个字段,请使用以下命令:
cut -f 3 data.txt #将输出(第 3 列的 field): three gamma
相反,如果您只想“剪切”每行的第二至第四字段,请使用以下 cut 命令:
cut -f 2-4 data.txt #将输出: two three four beta gamma delta
如果要仅“剪切”每行的第一至第二和第四至第五字段(省略第三字段),请使用以下 cut 命令:
cut -f 1-2,4-5 data.txt #将输出: one two four five alpha beta delta epsilon
或者,假设您想要第三个字段及其后的每个字段,而忽略前两个字段。 在这种情况下,您可以使用以下 cut 命令:
cut -f 3- data.txt #将输出: three four five gamma delta epsilon
使用 LIST
指定范围也适用于从一行中剪切字符 -c 或字节-b。 例如,要仅输出 data.txt
每行的第 3 到第 12 个字符,请使用以下 cut 命令:
cut -c 3-12 data.txt #将输出: e two thre pha beta g
请记住,每个单词之间的 空格 实际上是一个制表符,因此输出的两行都显示十个字符:八个字母数字字符和两个制表符。 换句话说,cut 省略了每行的前两个字符,将制表符视为一个字符。 输出 3 到 12 个字符,每个制表符作为一个字符计数; 并在第十二个之后省略任何字符。
在这种情况下,计数字节而不是字符将得到相同的输出,因为在 ASCII 编码的文本文件中,每个字符都由一个字节(八位)的数据表示。 所以命令:
cut -b 3-12 data.txt #同上结果: e two thre pha beta g
cut 输出文件 file.txt
的每一行的第三个字符,省略其他字符:
cut -c 3 file.txt
cut 输出文件 file.txt
的每一行的前三个字符,省略其余部分。
cut -c 1-3 file.txt
与以上 cut 命令相同。 输出 file.txt
每行的前三个字符。
cut -c -3 file.txt
cut 输出文件 file.txt
每行的第三个到最后一个字符,省略前两个字符。
cut -c 3- file.txt
cut 输出文件 /etc/passwd
的第一个字段,其中的字段由冒号 : 分隔。 /etc/passwd
的第一个字段是用户名,因此此命令将输出 passwd 文件中的每个用户名。
cut -d ':' -f 1 /etc/passwd
cut 输出 /etc/passwd
文件中将 /bin/bash
指定为登录 Shell
的任何条目的第一和第六字段,以冒号分隔。 此命令将输出任何登录外壳程序为 /bin/bash
的用户的用户名和主目录。
grep '/bin/bash' /etc/passwd | cut -d ':' -f 1,6
cut 命令其他示例:
[root@localhost text]$ cat test.txt abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz #打印第 1 个到第 3 个字符: [root@localhost text]$ cut -c1-3 test.txt abc abc abc abc abc #打印前 2 个字符: [root@localhost text]$ cut -c-2 test.txt ab ab ab ab ab #打印从第 5 个字符开始到结尾: [root@localhost text]$ cut -c5- test.txt efghijklmnopqrstuvwxyz efghijklmnopqrstuvwxyz efghijklmnopqrstuvwxyz efghijklmnopqrstuvwxyz efghijklmnopqrstuvwxyz ------------------------ #例如有一个学生报表信息,包含 No、Name、Mark、Percent: [root@localhost text]$ cat test.txt No Name Mark Percent 01 tom 69 91 02 jack 71 87 03 alex 68 98 #使用 -f 选项提取指定字段(这里的 f 参数可以简单记忆为 --fields的缩写): [root@localhost text]$ cut -f 1 test.txt No 01 02 03 [root@localhost text]$ cut -f2,3 test.txt Name Mark tom 69 jack 71 alex 68 #--complement 选项提取指定字段之外的列(打印除了第二列之外的列): [root@localhost text]$ cut -f2 --complement test.txt No Mark Percent 01 69 91 02 71 87 03 68 98 #使用 -d 选项指定字段分隔符: [root@localhost text]$ cat test2.txt No;Name;Mark;Percent 01;tom;69;91 02;jack;71;87 03;alex;68;98 [root@localhost text]$ cut -f2 -d";" test2.txt Name tom jack alex