cut命令从文件的每一行剪切字节、字符和字段并将它们写至标准输出。它是以文件的每一行作为处理对象的。 

命令格式:cut [选项] [范围] 文件。选项用来指定单位(字节、字符还是字段),范围指定选项的位置。
常用的选项有:
-b:指定以字节为单位显示选中内容
-c:指定以字符为单位显示选中内容
-f:指定以字段为单位显示选中内容
-d:指定字段的分界符,默认为制表符
其它的选项还有-n(仅和-b选项一起使用)、-s(仅和-f选项一起使用)
范围表示:
n:第n个字节/字符/字段
n-:从第n个字节/字符/字段到最后一个字节/字符/字段
n-m:从第n个字节/字符/字段到第m个字节/字符/字段,包括m
-m:从行的开头到第m个字节/字符/字段,包括m
-:从行开头到行的最后
一、显示passwd文件中用户名、密码、用户ID和用户目录。 passwd文件每行分为七列,以:为分隔符;这七列依次是用户名、密码、用户ID、组ID、用户描述、用户目录、用户bash。由于passwd文件内容过多,我们这里用sed显示其中的1-6行。
二、显示前两个字节或前两个字符
看起来-b选项和-c选项没什么区别嘛。。其实不然,若文件内容有汉字就可以看出来两者的差别了。
三、 你是不是有些疑惑:汉字不是占两个字节 么?cut -b - test1正好是显示两个字节呀。。不错,网上有很多资料都是这么说的,而且它们会告诉你用cut -b -3就可以完整的显示出一个汉字,原因是cut -b -2以字节为单位来处理,字符被“切成两半”,因此无法正常显示。
但是看了下面的图片,你或许会有不同的看法:
呵呵。。实在不好意思,貌似从utf-8到gb2312的编码转换没有成功,但是没关系,这不影响我们对为什么cut -b -2不能正确显示汉字的判断。
这个图片就可以说明-b和-c选项的差别:我们用cut -b - test1时,没有显示出汉字,但是换成-c选项则可以显示两个汉字。这就是-b(字节)和-c(字符)之间的区别。
我们看到编码为utf-8的test1文件第一行一共有5个汉字和3个字母,但wc -c统计是19个字节,而编码为iso-8859的test文件统计为14个字节!(wc -c在统计字节时,结束符/换行符也作为一个字节。)
这表明:在utf-8编码下,汉字是占三个字节的!
大家可自己动手试验一下,在utf-8编码下,用cut -b -3可以显示一个汉字,而在其它编码如gb2312、iso-8859等编码下,用cut -b -2就可以显示一个汉字。 (二)、
一.简单了解
新建一个文件,命名为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, names
re
n
au
c
m
eJ
c
如果是2到4这几个字符,就用连接号“-”
$cut -c2- names
ars
ony
man
ucy
im
hen
ack
自己感受理解一下“,”和“-”的作用,想一下如果去掉这些符号,上面的例子会输出什么。
明白了吧,自己试一下才能有更深的体会!!
二.过滤器作用
过滤器,不用我讲也明白,就是过滤我们不要的东东,剩下我们要的。
也许你看过这样的命令 $cat names | less
如果你不明白 "|"是什么东东,你先记住这是一种写法,而“|”这个东东叫作管道,接下来会有解释
为了体现过滤器作用,我们先用who(前一讲有介绍)查看一下
$who
farseer tty7 -- : (:)
farseer pts/ -- : (:0.0)
user tty9 -- : (:)
如果你只是想要用户名,那现在岂不是很不爽,后面所时间真是多余的麻烦,这时候cut就起作用了
$who | cut -c1-
farseer
farseer
user
最长的名字farseer也就只有7个字符,把前7个析取出来,短的也就跟着出来,多余的也只是空格,不影响阅读。
当然,出来之后还可以排序$who | cut -c1- | sort
如果要显示什么终端(第二列内容),那一样的道理
$who |cut -c10-
tty7
pts/
tty9
顺便排一下序,看一下效果
$who |cut -c10- | sort
pts/
tty7
tty9
如果我只要用户名和日期以及日期后面的东西呢?其实也很简单,在{一.简单了解}中已经提到“,”的作用了,现在加强一下理解
$who |cut -c1-,-
farseer -- : (:)
farseer -- : (:0.0)
user -- : (:)
如果把1-,-掉换一下呢?
$who |cut -c22-,-
farseer -- : (:)
farseer -- : (:0.0)
user -- : (:)
可见,还是会按原文的顺序。
至于这些数字22,-7是怎么来的,很简单,自己数,或者试一下看看结果就确定了。
到这里,应该对cut这个命令又较深了了解了吧,不过,还未结束。
三.-d和-f选项
要知道,我们的用户信息都保存在/etc/passwd这个文件里面,我们来看一下前10行
$head /etc/passwd #head就是显示文件前十行的命令
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/bin/sh
bin:x:::bin:/bin:/bin/sh
sys:x:::sys:/dev:/bin/sh
sync:x:::sync:/bin:/bin/sync
games:x:::games:/usr/games:/bin/sh
man:x:::man:/var/cache/man:/bin/sh
lp:x:::lp:/var/spool/lpd:/bin/sh
mail:x:::mail:/var/mail:/bin/sh
news:x:::news:/var/spool/news:/bin/sh
如果我们要取出用户名的话,就有点难度了。因为按照前面讲的方法会有很多多余的字符出现。
所以-d和-f选项派上了用场。因为发现有个特点,这些内容是用":"隔开的。
格式:cut -ddchar -ffields file
注释:dchar是分隔符号,fileds是分隔之后的段号
看下面的例子就差不多理解了
为了方便操作,我们把这前10行写到一个叫做pass的文本中,使用输出重定向">"
就是把本来输出到屏幕的内容输出到指定的文件中,如果文件不存在就自动创建,">"这个符号很形象
$head /etc/passwd > pass
$cat pass
root:x:::root:/root:/bin/bash
daemon:x:::daemon:/usr/sbin:/bin/sh
bin:x:::bin:/bin:/bin/sh
sys:x:::sys:/dev:/bin/sh
sync:x:::sync:/bin:/bin/sync
games:x:::games:/usr/games:/bin/sh
man:x:::man:/var/cache/man:/bin/sh
lp:x:::lp:/var/spool/lpd:/bin/sh
mail:x:::mail:/var/mail:/bin/sh
news:x:::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, 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
Chen Jihuang
名字和qq号使用制表符隔开(Tab键)。
用下面命令可以查看(这个命令不用过分追究,我也不清楚)
$sed -n l qq
Farseer\t619932509$
Chen Jihuang\t619932509$
看到了吧,事实上,如果你用过c或者c++,就知道\t转义为制表符
这时候你执行
$cut -f1 qq
Farseer
Chen Jihuang
发现没有用-d选项,就可以分段了,为什么呢?
因为默认分隔符号是制表符。

linux命令学习笔记:cut详解的更多相关文章

  1. linux命令学习:echo详解,格式化输出,不换行输出

    shell脚本不换行刷新数据 #!/bin/bash ] do a=$(ifconfig eth0 | grep 'RX pac' | awk '{print $2}' | awk -F: '{pri ...

  2. linux命令学习笔记(25):linux文件属性详解

    Linux 文件或目录的属性主要包括:文件或目录的节点.种类.权限模式.链接数量.所归属的用户和用户组. 最近访问或修改的时间等内容.具体情况如下: 命令: ls -lih 输出: [root@loc ...

  3. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

  4. (转)Linux命令之Ethtool用法详解

    Linux命令之Ethtool用法详解 原文:http://www.linuxidc.com/Linux/2012-01/52669.htm Linux/Unix命令之Ethtool描述:Ethtoo ...

  5. Linux命令学习笔记1

    1.Linux命令学习 2.Mkdir /data       -创建文件夹 在/下创建文件夹 data 3.Cd               -目录切换 列如cd / 4.Touch /data/1 ...

  6. linux命令学习笔记-eval命令详解

    功能说明:重新运算求出参数的内容. 语 法:eval [参数] 补充说明:eval可读取一连串的参数,然后再依参数本身的特性来执行. 参 数:参数不限数目,彼此之间用分号分开. .eval命令将会首先 ...

  7. linux命令学习笔记(50):crontab命令

    前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个 ...

  8. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  9. Angular6 学习笔记——组件详解之模板语法

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

随机推荐

  1. JSF教程(8)——生命周期之Apply Request Values Phase

    当一个组件树在一个postbacks请求中被恢复之后其中每一个组件从request的參数中取得各自的值,这里使用的是processDecodes方法. 这个值会保存在本地的每一个组件中,在源代码中此过 ...

  2. mysql主从只同步部分库或表

    同步部分数据有两个思路,1.master只发送需要的:2.slave只接收想要的. master端: binlog-do-db      二进制日志记录的数据库(多数据库用逗号,隔开)binlog-i ...

  3. solr入门之pinyin4j源代码改写动态加入扩展词及整合进war项目中

    1.初始化时载入用户定义的字典 package net.sourceforge.pinyin4j; import net.sourceforge.pinyin4j.multipinyin.Trie; ...

  4. php程序执行过程--非宏观和微观而是写的程序一行一行的路径----利用xdebug了解一段程序的执行过程----覆盖率

    1.xdebug_start_code_coverage();//在需要开始跟踪程序执行路径时使用 2.var_dump(xdebug_get_code_coverage());//在结尾使用打印程序 ...

  5. php减少损耗的方法之一 缓存对象

    即把实例后的对象缓存起来(存入变量),当需要再次实例化时,先去缓存里查看是否存在.存在则返回.否则实例化.

  6. jQuery 标签切换----之选项卡的实现

    这一次,我自己写了代码,先看html部分: <div class="tab"> <div class="tab_menu"> <u ...

  7. gitlab多人协同工作

    gitlab多人协同工作 本文为亨利向<Git权威指南>的作者蒋鑫老师的答疑邮件写成. 这里特别感谢蒋鑫老师对我询问gitlab的协同工作流程问题的详细解答. 蒋鑫老师的细致专业的解答让我 ...

  8. Android Apk包下查看 sha1

    用keytool工具查看sha1,格式如下:keytool -printcert -file  Urovo.RSA文件路径(APK解压后在Meta-INF文件夹下)

  9. JS中try.. catch..的用法

    try 测试代码块的错误. catch 语句处理错误. throw 创建并跑出错误. try { //在这里运行代码 抛出错误 } catch(err) { //在这里处理错误 } 下面是一个实例: ...

  10. 【BZOJ4212】神牛的养成计划 Trie树+可持久化Trie树

    [BZOJ4212]神牛的养成计划 Description Hzwer成功培育出神牛细胞,可最终培育出的生物体却让他大失所望...... 后来,他从某同校女神 牛处知道,原来他培育的细胞发生了基因突变 ...