您的位置:首页 > 运维架构 > Shell

shell文字过滤程序(十):cut命令

2015-10-07 14:50 405 查看
【版权声明:转载请保留源:blog.csdn.net/gentleliu。Mail:shallnew at 163 dot com】

cut指挥类似至awk,从行内提取的信息,它是一个较弱的版本的功能awk。

cut命令格式为:cut [options] filename

当中options有:

-d 指定与空格和t a b键不同的域分隔符。类似于awk的“-F”。

-f field 指定剪切域数

-c list 指定剪切字符数。

首先我们来处理按:切割的password文件:

# cat passwd
root:x:0:0:root:/root:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
ftp:x:83:83:ftp:/home/ftp:/bin/sh
nobody:x:99:99:nobody:/home:/bin/sh
sshd:x:103:99:Operator:/var:/bin/sh
按:切割,然后取第一列和第六列,-f能够指定获取的域数:

# cut -d: -f1,6 passwd
root:/root
proxy:/bin
operator:/var
ftp:/home/ftp
nobody:/home
sshd:/var
指定域数还能够这样写:

# cut -d: -f 1-4,6 passwd
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var
awk的实现为:

# awk -F: 'BEGIN{OFS=":"}{print $1,$2,$3,$4,$6}' passwd
root:x:0:0:/root
proxy:x:13:13:/bin
operator:x:37:37:/var
ftp:x:83:83:/home/ftp
nobody:x:99:99:/home
sshd:x:103:99:/var
可是假设要指定多个字符来切割的话,cut就不行了。cut仅仅支持单个分隔字符,二awk支持多个。

比方我们以“bin”分分隔:

# awk -F"bin" 'BEGIN{OFS=":"}{print $1}' passwd
root:x:0:0:root:/root:/
proxy:x:13:13:proxy:/
operator:x:37:37:Operator:/var:/
ftp:x:83:83:ftp:/home/ftp:/
nobody:x:99:99:nobody:/home:/
sshd:x:103:99:Operator:/var:/
使用cut:
# cut -d"bin" -f1 passwd
cut: the delimiter must be a single character
Try 'cut --help' for more information.
这里能够看见cut命令的功能非常有限。

cut默认以tab键来切割,awk默认以空格或多个空格或tab键来切割:

# sed 's/:/\t/g' passwd | cut -f5
root
proxy
Operator
ftp
nobody
Operator
# sed 's/:/\t/g' passwd | awk '{print $5}'
root
proxy
Operator
ftp
nobody
Operator
cut能够剪切第随意字符。看似功能强大,但非常少有使用价值。

使用- c选项指定精确剪切数目。这样的方法需确切知道開始及结束字符。

通常不用这样的方法,除非在固定长度的域或文件名称上。

来看几个样例即可了:

# cut -c1,2,4 passwd
rot
prx
opr
ft:
noo
ssd
# cut -c5-9 passwd
:x:0:
y:x:1
ator:
x:83:
dy:x:
:x:10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: