0024. shell命令--cut

目录

24. shell命令--cut

功能说明

语法格式

选项说明

实践操作

注意事项


24. shell命令--cut

功能说明

        cut 命令是 Linux 操作系统中的一个文本处理命令,主要用于从输入行中剪切字节、字符和字段,并将这些剪切的内容显示到标准输出。

        cut命令从标准输入或文件中读取数据,然后根据指定的选项和参数,将每一行剪切为字节、字符或字段,并将结果输出到标准输出。

        cut 命令 用来显示行中的指定部分,删除文件中指定字段。cut 经常用来显示文件的内容,类似于 type 命令。

        说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file 所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件 f3 中。

        当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用 more 等命令分屏显示。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;按 Ctrl+Q 键可以恢复滚屏。按 Ctrl+C(中断)键可以终止该命令的执行,并且返回 Shell 提示符状态。

语法格式

cut [选项]... [文件]...

SYNOPSIS
       cut OPTION... [FILE]...

选项说明

  • -b:以字节为单位进行分割。
  • -c:以字符为单位进行分割。
  • -d 分隔符:使用指定分隔符代替制表符作为划分符,默认使用制表符。
  • -f:选择指定的段,如果选择多个段使用“,”分隔。
  • --complement:补集模式,提取除指定字段或字符位置外的数据。
  • --output-delimiter 字符串:指定输出字段的分隔符。
  • -n:与-b一起使用,表示不分割占多个字节的字符。
  • --help:显示帮助信息并退出。
  • --version:显示版本信息并退出。

参数的具体使用

  • b、-c、-f后面可以跟具体的数字或范围,如N、N-、N-M、-M,其中N、M为具体的数字,表示从第几个开始选择或到第几个结束选择。
  • -d后面需要指定分隔符,通常与-f一起使用,用于指定字段的分隔符。

实践操作

1. 环境准备
mkdir -p /test/cut
cd /test/cut
head -2 /etc/passwd >file1.txt

cat >file2.txt <<'eof'
No Name Num1 Num2
01 ella 67 86
02 zora 74 84
eof

echo 123456789 >file3.txt
ls
head -v file*

2. 指定分隔符,提取指定文件第N列内容
cut -f 1 file1.txt    #不生效
cut -f 2 file2.txt
cut -d : -f 1 file1.txt    #需指定分隔符
cut -d" " -f1 file2.txt
cut -d: -f1,3 file1.txt
cut -d" " -f2,4 file2.txt
cut -d3 -f1 file3.txt

3.指定输出字段的分隔符
head -v file*
cut -d: -f1,6 --output-delimiter='-->' file1.txt    #这个命令会提取第1个和第6个字段,并使用 "-->" 作为字段的分隔符
cut -d" " -f2,4 --output-delimiter='|' file2.txt    #这个命令会提取第2个和第4个字段,并使用 "|" 作为字段的分隔符

4. --complement 选项提取指定字段之外的列(打印除了第N列之外的列)
head -v file*
cut -d: -f7 --complement file1.txt
cut -d" " -f1,3 --complement file2.txt

5. 指定字段的字符或者字节范围
cut 命令可以将一串字符作为列来显示,字符字段的记法:
#N- :从第 N 个字节、字符、字段到结尾;
#N-M :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段;
#-M :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
#-b 表示字节;
#-c 表示字符;
#-f 表示定义字段。
head -v file*
cut -c 2 file1.txt    #打印第2个字符
cut -c5 file2.txt    #打印第5个字符
cut -c2-5 file3.txt    #打印2-5个字符
cut -c-6 file3.txt    #打印前6个字符
cut -c6- file3.txt    #打印从6个字符开始到结尾的字符
cut -c-3,6- file3.txt   #打印1到3和6到最后的字符
cut -c2-3,6- file3.txt     #打印2到3和6到最后的字符
rev file3.txt |cut -c -5 |rev    #打印最后5个字符,遗憾的是, cut并没有提供最后字符的支持. 不过我们可以通过字符串反转来实现

命令示例:1. 环境准备

mkdir -p /test/cut
cd /test/cut
head -2 /etc/passwd >file1.txt

cat >file2.txt <<'eof'
No Name Num1 Num2
01 ella 67 86
02 zora 74 84
eof

echo 123456789 >file3.txt
ls
head -v file*

输出结果:

[root@MineGi ~]# mkdir -p /test/cut
[root@MineGi ~]# cd /test/cut
[root@MineGi /test/cut]# head -2 /etc/passwd >file1.txt
[root@MineGi /test/cut]# cat >file2.txt <<'eof'
> No Name Num1 Num2
> 01 ella 67 86
> 02 zora 74 84
> eof
[root@MineGi /test/cut]# echo 123456789 >file3.txt
[root@MineGi /test/cut]# ls
file1.txt  file2.txt  file3.txt
[root@MineGi /test/cut]# head -v file*
==> file1.txt <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

==> file2.txt <==
No Name Num1 Num2
01 ella 67 86
02 zora 74 84

==> file3.txt <==
123456789
[root@MineGi /test/cut]#

命令示例:2. 指定分隔符,提取指定文件第N列内容

cut -f 1 file1.txt    
cut -f 2 file2.txt
cut -d : -f 1 file1.txt    
cut -d" " -f1 file2.txt
cut -d: -f1,3 file1.txt
cut -d" " -f2,4 file2.txt
cut -d3 -f1 file3.txt

输出结果:

[root@MineGi /test/cut]# cut -f 1 file1.txt    
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@MineGi /test/cut]# cut -f 2 file2.txt
No Name Num1 Num2
01 ella 67 86
02 zora 74 84
[root@MineGi /test/cut]# cut -d : -f 1 file1.txt    
root
bin
[root@MineGi /test/cut]# cut -d" " -f1 file2.txt
No
01
02
[root@MineGi /test/cut]# cut -d: -f1,3 file1.txt
root:0
bin:1
[root@MineGi /test/cut]# cut -d" " -f2,4 file2.txt
Name Num2
ella 86
zora 84
[root@MineGi /test/cut]# cut -d3 -f1 file3.txt
12
[root@MineGi /test/cut]#

命令示例:3.指定输出字段的分隔符

head -v file*
cut -d: -f1,6 --output-delimiter='-->' file1.txt    
cut -d" " -f2,4 --output-delimiter='|' file2.txt 

输出结果:

[root@MineGi /test/cut]# head -v file*
==> file1.txt <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

==> file2.txt <==
No Name Num1 Num2
01 ella 67 86
02 zora 74 84

==> file3.txt <==
123456789
[root@MineGi /test/cut]# cut -d: -f1,6 --output-delimiter='-->' file1.txt    
root-->/root
bin-->/bin
[root@MineGi /test/cut]# cut -d" " -f2,4 --output-delimiter='|' file2.txt 
Name|Num2
ella|86
zora|84
[root@MineGi /test/cut]# 

命令示例:4. --complement 选项提取指定字段之外的列(打印除了第N列之外的列)

head -v file*
cut -d: -f7 --complement file1.txt
cut -d" " -f1,3 --complement file2.txt

输出结果:

[root@MineGi /test/cut]# head -v file*
==> file1.txt <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

==> file2.txt <==
No Name Num1 Num2
01 ella 67 86
02 zora 74 84

==> file3.txt <==
123456789
[root@MineGi /test/cut]# cut -d: -f7 --complement file1.txt
root:x:0:0:root:/root
bin:x:1:1:bin:/bin
[root@MineGi /test/cut]# cut -d" " -f1,3 --complement file2.txt
Name Num2
ella 86
zora 84
[root@MineGi /test/cut]#

命令示例:5. 指定字段的字符或者字节范围

head -v file*
cut -c 2 file1.txt    
cut -c5 file2.txt    
cut -c2-5 file3.txt    
cut -c-6 file3.txt    
cut -c6- file3.txt    
cut -c-3,6- file3.txt   
cut -c2-3,6- file3.txt     
rev file3.txt |cut -c -5 |rev 

输出结果:

[root@MineGi /test/cut]# head -v file*
==> file1.txt <==
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

==> file2.txt <==
No Name Num1 Num2
01 ella 67 86
02 zora 74 84

==> file3.txt <==
123456789
[root@MineGi /test/cut]# cut -c 2 file1.txt    
o
i
[root@MineGi /test/cut]# cut -c5 file2.txt    
a
l
o
[root@MineGi /test/cut]# cut -c2-5 file3.txt    
2345
[root@MineGi /test/cut]# cut -c-6 file3.txt    
123456
[root@MineGi /test/cut]# cut -c6- file3.txt    
6789
[root@MineGi /test/cut]# cut -c-3,6- file3.txt   
1236789
[root@MineGi /test/cut]# cut -c2-3,6- file3.txt     
236789
[root@MineGi /test/cut]# rev file3.txt |cut -c -5 |rev 
56789
[root@MineGi /test/cut]#

注意事项

  • 在使用 cut 命令时,请确保你了解你的文本数据的格式和结构,以便正确选择选项和参数。
  • 当处理包含多字节字符的文本时,请特别注意 -b 和 -c 选项的行为。
  • 如果你需要处理复杂的文本数据或执行复杂的文本处理任务,请考虑使用更强大的文本处理工具(如 awk、sed 或 perl)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MineGi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值