linux cut -b用法,linux cut

名称:cut

使用权限:所有使用者

用法:cut -cnum1-num2 filename

说明:显示每行从开头算起 num1 到 num2 的文字。

范例:

shell>> cat example

test2

this is test1

shell>> cut -c0-6 example ## print 开头算起前 6 个字元

test2

this i

cut:

作用:和名字一样,就是“剪”掉一些东西,析取我们所要的东西

格式:cut -cchars file 其中-c是选项,chars是我们所要析取出来的字符,file是我们所要操作的文件

一.简单了解

新建一个文件,命名为names,内容如下

$cat names

Farseer

Tony

Emanuel

Lucy

Jim

ChenJihuang

Jack

假如我们要析取出第3个字符,就这样做

$cut -c3 names

r

n

a

c

m

e

c

如果要析取第3,5字符,就这样,用逗号隔开即可,如果不用

$cut -c3,5 names

re

n

au

c

m

eJ

c

如果是2到4这几个字符,就用连接号“-”

$cut -c2-4 names

ars

ony

man

ucy

im

hen

ack

自己感受理解一下“,”和“-”的作用,想一下如果去掉这些符号,上面的例子会输出什么。

明白了吧,自己试一下才能有更深的体会!!

二.过滤器作用

过滤器,不用我讲也明白,就是过滤我们不要的东东,剩下我们要的。

也许你看过这样的命令 $cat names | less

如果你不明白 "|"是什么东东,你先记住这是一种写法,而“|”这个东东叫作管道,接下来会有解释

为了体现过滤器作用,我们先用who(前一讲有介绍)查看一下

$who

farseer tty7         2008-04-07 12:19 (:0)

farseer pts/0        2008-04-07 14:01 (:0.0)

user     tty9         2008-04-07 12:34 (:20)

如果你只是想要用户名,那现在岂不是很不爽,后面所时间真是多余的麻烦,这时候cut就起作用了

$who | cut -c1-7

farseer

farseer

user

最长的名字farseer也就只有7个字符,把前7个析取出来,短的也就跟着出来,多余的也只是空格,不影响阅读。

当然,出来之后还可以排序$who | cut -c1-7 | sort

如果要显示什么终端(第二列内容),那一样的道理

$who |cut -c10-14

tty7

pts/0

tty9

顺便排一下序,看一下效果

$who |cut -c10-14 | sort

pts/0

tty7

tty9

如果我只要用户名和日期以及日期后面的东西呢?其实也很简单,在{一.简单了解}中已经提到“,”的作用了,现在加强一下理解

$who |cut -c1-7,22-

farseer 2008-04-07 12:19 (:0)

farseer 2008-04-07 14:01 (:0.0)

user    2008-04-07 12:34 (:20)

如果把1-7,22-掉换一下呢?

$who |cut -c22-,1-7

farseer 2008-04-07 12:19 (:0)

farseer 2008-04-07 14:01 (:0.0)

user    2008-04-07 12:34 (:20)

可见,还是会按原文的顺序。

至于这些数字22,1-7是怎么来的,很简单,自己数,或者试一下看看结果就确定了。

到这里,应该对cut这个命令又较深了了解了吧,不过,还未结束。

三.-d和-f选项

要知道,我们的用户信息都保存在/etc/passwd这个文件里面,我们来看一下前10行

$head /etc/passwd        #head就是显示文件前十行的命令

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

如果我们要取出用户名的话,就有点难度了。因为按照前面讲的方法会有很多多余的字符出现。

所以-d和-f选项派上了用场。因为发现有个特点,这些内容是用":"隔开的。

格式:cut -ddchar -ffields file

注释:dchar是分隔符号,fileds是分隔之后的段号

看下面的例子就差不多理解了

为了方便操作,我们把这前10行写到一个叫做pass的文本中,使用输出重定向">"

就是把本来输出到屏幕的内容输出到指定的文件中,如果文件不存在就自动创建,">"这个符号很形象

$head /etc/passwd > pass

$cat pass

root:x:0:0:root:/root:/bin/bash

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

lp:x:7:7:lp:/var/spool/lpd:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

好的,接下来是真正的例子。

$cut -d: -f1 pass

root

daemon

bin

sys

sync

games

man

lp

mail

news

看到了吧,:就是分隔符号,1就是分隔后的第一段,也就是用户名

这时候你应该产生一种思维,如果要第n断,只须修改f的参数即可。

下面这一句是显示用户名和shell的路径(最后一段的内容)

$cut -d: -f1,7 pass

root:/bin/bash

daemon:/bin/sh

bin:/bin/sh

sys:/bin/sh

sync:/bin/sync

games:/bin/sh

man:/bin/sh

lp:/bin/sh

mail:/bin/sh

news:/bin/sh

再一次看到了“,”的功能了吧

同样的“-”也是可以用的,我就不举例了,你自己试试。

再举一个例子,加入有个文件qq里面存放你好友的QQ,内容如下

$cat qq

Farseer 619932509

Chen Jihuang    619932509

名字和qq号使用制表符隔开(Tab键)。

用下面命令可以查看(这个命令不用过分追究,我也不清楚)

$sed -n l qq

Farseer/t619932509$

Chen Jihuang/t619932509$

看到了吧,事实上,如果你用过c或者c++,就知道/t转义为制表符

这时候你执行

$cut -f1 qq

Farseer

Chen Jihuang

发现没有用-d选项,就可以分段了;

因为默认分隔符号是制表符。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值