linux常用命令—cut

cut—字符串、文本截取工具

基础用法:命令输出 | cut 选项 定位规则 cut 选项 定位规则 处理文本

 

一、按字符截取:选项-c

待处理文本file内容如下:

linux常用命令—cut

(1)cut -c index1,index2,index3..file

分别截取file中所有行的第index1、index2、index3...个字符(index最小值为1)

cut -c 1,5,9 file

linux常用命令—cut

(2)cut -c -index file

截取file中所有行从第一个字符到第index个字符之间的所有字符(index最小值为1,截取包含头尾字符)

cut -c -7 file

linux常用命令—cut

(3)cut -c index- file

截取file中所有行从第index个字符到最后一个字符之间的所有字符(index最小值为1,截取包含头尾字符)

cut -c 6- file

linux常用命令—cut

(4)cut -c index1-index2 file

截取file中所有行从第index1个字符到第index2个字符之间的所有字符(index1最小值为1,index2>=index1,截取包含头尾字符)

cut -c 1-4 file

linux常用命令—cut

 

二、按字节截取:选项-b

如果处理文本均为单字节字符,则-c选项和-b选项用法完全相同,如果包含多字节字符(例如中文),则需要结合-n选项来截取(注意中文一个字符占3个字节):

待处理文本file2内容如下:

linux常用命令—cut

cut -nb 1-3,7-9 file2

linux常用命令—cut

 

注意-b与-c选项会对其后的所有定位规则进行去重、取并集并从小到大排序操作,例如

cut -c -3,3,7-10,4等同于cut -c -4,7-10

 

三、按域截取:选项-d和-f

cut -d 分隔符 -f 要截取的域

例如以单个空格分割字符串:

echo "apple banana pear"  | cut -d ' ' -f 2

输出:

banana

 

注意:

(1)cut分隔符除了一些特殊符号外,可以去除引号包裹或者加转义字符转义,但最好是加上方便辨别。特殊符号:空格符 、*(通配符)、\(反斜杠,转义字符)...

echo "apple,banana,pear"  | cut -d , -f 2
echo "apple banana pear"  | cut -d \  -f 2
echo "apple*banana*pear"  | cut -d \* -f 2
echo "apple\banana\pear"  | cut -d \\ -f 2

以上命令输出结果均为:

banana

(2)要截取的域也可以是多个,写法和-c/-b选项的定位规则一样(逗号+中划线),只不过截取出来的结果会包含分隔符

例如截取第一个域和第二个域:

echo "apple,banana,pear"  | cut -d ',' -f 1,2

输出:

apple,banana

截取第二个域到最后一个域:

echo "apple,banana,pear"  | cut -d ',' -f 2-

输出:

banana,pear

 

四、反向截取:选项--complement

例如按截取除第二个域以外的所有字符:

echo "apple,banana,pear"  | cut --complement -d , -f 2

输出:

apple,pear

注意按域截取使用--complement进行反向截取时,每去掉一个域会同时去掉一个分割符。

 

五、与awk比较

与同样用来截取字符串、文本的awk命令比较,cut有以下缺点:

(1).当分隔符为一个或多个空格时,awk可以胜任,但是cut不行,它只能以一个空格分割。

cut分割包含多个空格的字符串,截取第二个域:

echo "apple  banana pear" | cut -d ' ' -f 2

输出:

 

awk分割包含多个空格的字符串,截取第二列:

echo "apple  banana pear" | awk '{print $2}'

输出:

banana

(2).同样是分隔符,awk可以同时使用多种分割符,而cut只能使用一个。

(3).awk处理文件或多行字符串时可以选择任意一行进行处理,而cut只能对所有行进行处理,所以cut一般也只用来处理一行字符串。

上一篇:【PHP实例】使用GD2函数实现图片裁剪


下一篇:pandas学习-Task09