Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2857453
  • 博文数量: 471
  • 博客积分: 7081
  • 博客等级: 少将
  • 技术积分: 5369
  • 用 户 组: 普通用户
  • 注册时间: 2012-01-04 21:55
文章分类

全部博文(471)

文章存档

2014年(90)

2013年(69)

2012年(312)

分类: LINUX

2013-02-25 10:37:35

前面我们讲解的find、grep、sort、uniq命令都是行文本处理工具,然而很多时候我们又想知道这些行中某一列文本的内容或是只有部分列的内容对我们是有用的,这样的情况又该如何处理呢,怎么样知道特定的列的内容呢?cut命令就该登场了。

1、cut命令

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定 File 参数,cut 命令将读取标准输入。

cut命令格式:

cut {  -b List [  -n ] |  -c List |  -f List [  -s ] [  -d Character ] } [ File ... ]
参数:
        -b List     指定字节位置。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。

 -c List     指定字符位置。例如,如果您指定 -c 1-72,cut 命令将写出文件每一行的头 72 个字符。

  -d Character     使用 Character 变量指定的字符作为指定 -f 标志时的字段定界符。您必须在对 shell 有特殊意义的字符(比如空格字符)上加上引号。

  -f List     指定文件中设想被定界符(缺省情况下为制表符)隔开的字段的列表。例如,如果您指定 -f 1,7,cut 命令将仅写出每个行的第一和第七个字段。如果行中不包含字段定界符,cut 命令将通过它们而不对其进行任何操作(对表格的副标题有用),除非指定了 -s 标志。

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

 -s     取消不包含定界符的行。仅和 -f 标志一起使用。

  说明:

cut命令必须指定 -b、-c 或 -f 标志之一。List 参数为一个以逗号分隔、以空格分隔或连字符分隔的整数的列表(顺序递增)。连字符分隔符表示范围。以下条目是 List 参数的一些示例,它可以用来指代字节、字符或字段: 

1,4,7
1-3,8
-5,10
3-

其中 -5 为从第一个到第五个的简写形式,3- 为从第三个到最后一个的简写形式。


二、使用例子

1、# cat /etc/passwd |grep bash
root:x:0:0:root:/root:/bin/bash
beckham:x:500:500:beckhamkuang:/home/beckham:/bin/bash
king:x:501:501::/home/king:/bin/bash
mysql:x:100:103:MySQL server:/var/lib/mysql:/bin/bash

以: 分割拿第一列与第7列

# cut -d ':' -f 1,7  /etc/passwd |grep bash
root:/bin/bash
beckham:/bin/bash
king:/bin/bash
mysql:/bin/bash

2、这里我使用 -d 参数指定了字段分割符为“:”

# tail -3 /etc/passwd|cut -f 1,6 -d':'
beckham:/home/beckham
king:/home/king
mysql:/var/lib/mysql


3、如果想知道系统中每个用户的home目录都是什么,可以在/etc/password文件查找,但是显示所有的内容又比较乱,我们只要找到需要的内容就可以了:

# tail -3 /etc/passwd|cut -f 1,6 -d':'
beckham:/home/beckham
king:/home/king
mysql:/var/lib/mysql


阅读(1159) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~