linux cut参数,Linuxcut命令 - 米扑博客

cut 是一个选取命令,就是将一段数据经过分析,取出我们想要的字段。

通常,用于获取特定列、截取子字符串、排序sort等

1)其语法格式为

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

使用说明

cut 命令从文件的每一行剪切字节、字符、字段,并将这些字节、字符和字段写至标准输出。

如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数

-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

-c :以字符为单位进行分割。

-d :自定义分隔符,默认为制表符。

-f  :与-d一起使用,指定显示哪个区域。

-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除。

2)cut一般以什么为依据

也就是说,我怎么告诉cut我想定位到的剪切内容呢?

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

3)以“字节”定位

举个例子吧,当你执行ps命令时,会输出类似如下的内容:

#who

root     pts/1        2017-11-29 09:04 (1.203.155.98)

root     pts/0        2017-11-29 09:04 (1.203.155.98)

如果我们想提取每一行的第4个字节,就这样:

#who | cut -b 4

t

t

4) 截取特定位置的字符

如果“字节”定位中,我想提取第2,3,4个,以及第8个字节,怎么办?

-b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了。

#who | cut -b 2-4,28

oot1

oot1

但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。

#who | cut -b 28,2-4

oot1

oot1

5) 小技巧,不直观,不推荐

# who

root     pts/1        2017-11-29 09:04 (1.203.155.98)

root     pts/0        2017-11-29 09:04 (1.203.155.98)

a)截取指定位置字符

# who | cut -b 3

o

o

b)截取开始到指定位置字符

# who | cut -b -3

roo

roo

c)截取指定位置到结尾字符

# who | cut -b 3-

ot     pts/1        2017-11-29 09:04 (1.203.155.98)

ot     pts/0        2017-11-29 09:04 (1.203.155.98)

解释说明

-3表示从第一个字节到第三个字节,

3-表示从第三个字节到行尾。

如果你细心,你可以看到这两种情况下,都包括了第三个字节“o”。

如果我执行who | cut -b -3,3-,你觉得会如何呢?答案是输出整行,不会出现连续两个重叠的c的。

#who | cut -b -3,3-

root     pts/1        2017-11-29 09:04 (1.203.155.98)

root     pts/0        2017-11-29 09:04 (1.203.155.98)

cut 命令分割实例

cut命令可以从一个文本文件或者文本流中提取文本列。

cut -d'分隔字符' -f fields <==用于有特定分隔字符

cut -c 字符区间 <==用于排列整齐的信息

选项与参数:

-d :后面接分隔字符。与 -f 一起使用;

-f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思;

-c :以字符 (characters) 的单位取出固定字符区间;

注意:-d 后面连接的分隔字符,不是字符串,例如:可以接空格' ' 字符,但不能接 "love"字符串

PATH 变量如下

[root@www ~]# echo $PATH

/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

# 1 | 2 | 3 | 4 | 5 | 6 | 7

将 PATH 变量取出,我要找出第五个路径(起始数组下标为 1 开始)

#echo $PATH | cut -d ':' -f 5

/usr/local/bin

将 PATH 变量取出,我要找出第三和第五个路径(起始数组下标为 1 开始)

# echo $PATH | cut -d ':' -f 3,5

/sbin:/usr/local/bin

将 PATH 变量取出,我要找出第三到最后一个路径(起始数组下标为 1 开始)

echo $PATH | cut -d ':' -f 3-

/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games

将 PATH 变量取出,我要找出第一到第三个路径(起始数组下标为 1 开始)

# echo $PATH | cut -d ':' -f 1-3

/bin:/usr/bin:/sbin:

将 PATH 变量取出,我要找出第一到第三,还有第五个路径。

echo $PATH | cut -d ':' -f 1-3,5

/bin:/usr/bin:/sbin:/usr/local/bin

实用例子:只显示 /etc/passwd 的用户和 shell

# cat /etc/passwd | cut -d ':' -f 1,7

root:/bin/bash

daemon:/bin/sh

bin:/bin/sh

应用实例

计算linux服务器的负载情况,获取5分钟平均负载情况,大于5则杀死一些进程

awk 获取5分钟平均负载

# top -b | head -n1 | awk '{print $12}' | cut -d ',' -f1

1.32

解释命令:

a) top -b 获取文本格式,否则会报错  shell illegal character: ^[

b)awk '{print $12}'  获取第12个字段(下标为 1 起始),即5分钟平均负载值

c) cut -d ',' -f1   分割5分钟平均负载值(1.32,)注意:第12个字段有一个逗号

字符串分割

上面已经介绍了 cut 命令,其只支持 -d '字符',不支持 -d '字符串'

那么,若要进行字符串分割提取,该如何做呢?

答案:使用 awk 命令

示例演示:

1)显示出 PATH 变量内容

# echo $PATH

/usr/local/nginx/sbin:/usr/local/php/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

2)cut -d ':' 分割字符

# echo $PATH | cut -d ':' -f 1,2,8

/usr/local/nginx/sbin:/usr/local/php/bin:/root/bin

3)awk -F 'local/' '{print $2}' 分割字符串

# echo $PATH | awk -F 'local/' '{print $2 "\t" $3 "\t" $4 "\t" $NF}'

nginx/sbin:/usr/ php/bin:/usr/lib64/qt-3.3/bin:/usr/ sbin:/usr/ bin:/usr/sbin:/usr/bin:/root/bin

说明:awk -F 'local/' 先把字符串分割成数组,然后打印出数组的元素 $2/$3/$4/$NF(NF表示最后一个元素),awk print 起始下标是1

参考推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值