linux之cut命令的用法

1、linux之cut命令的用法

英文定义:linux

Print selected parts of lines from each FILE to standard output.less

1:cut应用范围

是一个选取命令,就是将一段数据通过分析,取出咱们想要的。通常来讲,选取信息一般是针对“行”来进行分析的,并非整篇信息分析的

2:cut 用法格式this

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


3:主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一块儿使用,指定显示哪一个区域。
-n :取消分割多字节字符。仅和 -b 标志一块儿使用。若是字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围以内,该字符将被写出;不然,该字符将被排除。
spa


4:cut查找和切分通常的标准,经常使用参数选项orm

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

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

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


5:cut按字节查找举例(参数:-b)(以/passwd文件为实例说明)it

tail -n 3 /etc/passwd

mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin

smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin

www:x:503:502::/home/www:/sbin/nologin


1) 截取每行的第一个字节,cut -b + 数字(后面的数字就是表示第几个字节)

tail -n 3 /etc/passwd |cut -b 1

m

s

w

2) 截取每行的多个字节(好比截取2-5个字节)

参数:cut -b 2-5 

tail -n 3 /etc/passwd |cut -b 2-5

ailn

mmsp

ww:x

3) 截取每行的多个字节,能够经过逗号隔开,表示多种不一样截取方式

举例:(好比截取2-5个字节和7-8个字节) 

参数:cut -b 2-5,7-8 

tail -n 3 /etc/passwd |cut -b 2-5,7-8

ailnll

mmspx:

ww:x50

4) 截取每行的多个字节(缩写技巧) 

参数:cut -b -3 表示从第1个到3个 

      cut -b 3- 表示从第三个开始到结尾

截取每行的第1个到第三个字符

tail -n 3 /etc/passwd |cut -b -3

mai

smm

www

截取每行的第3个到尾部的所有字符

tail -n 3 /etc/passwd |cut -b 3-

ilnull:x:47:47::/var/spool/mqueue:/sbin/nologin

msp:x:51:51::/var/spool/mqueue:/sbin/nologin

w:x:503:502::/home/www:/sbin/nologin


2、cut按字符查找举例(参数:-c)(以/passwd文件为实例说明)

参数:cut -c 

说明:其实在英文字符截取中(按字符和字节查找区别不大,但正截取中文字符中两者就有区别了)两者用法和参数格式差很少,下面咱们来看看他们在截取中文字符的时候的区别

1)在截取英文字符状况下的比较

tail -n 3 /etc/passwd |cut -b -5

mailn

smmsp

www:x

----------------------------------------

tail -n 3 /etc/passwd |cut -c -5

mailn

smmsp

www:x

2中方式显示的内容同样,区别不大


2)截取中文字符比较

在中文截取中 cut -b会按字节截取,就是每次截取8bit长度的字符,而中文根据编码不同,通常是三个字符或者2个字符表示一个

中文,因此在用 cut -b在截取的时候就会出现乱码,不能正确显示字符,解决办法添加另一个参数:-n,就不会按单个字符截取了

结论:cut -bn 可以解决中文截取乱码问题,-n用于告诉cut不要将多字节字符拆开

举例:

cat cut_ch.txt
星期一
星期二
星期三
星期四
cut -b 3 cut_ch.txt
xxxx乱码

xxxx乱码

xxxx乱码
[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt




看到了吧,用-c则会以字符为单位,输出正常;而-b只会以字节(8位二进制位)来计算,输出就是乱码。
当遇到多字节字符时,可使用-n选项,

3、按域来进去提取信息

域是怎么回事呢?

为何会有“域”的提取呢,由于刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则一筹莫展。这时候“域”就派上用场 了。若是你观察过/etc/passwd文件,你会发现,比较零散的排放。可是,冒号在这个文件的每一行 中都起到了很是重要的做用,冒号用来隔开每个项。

咱们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!

举例说明

tail -n 3 /etc/passwd |cut -d : -f 1

mailnull

smmsp

www

原理:经过分割符":"把每一行切分红N段,而后经过-f参数获取想要得到的分割的段,-f后面的数字就是表示显示输出第几个段

tail -n 3 /etc/passwd |cut -d : -f 1,6

mailnull:/var/spool/mqueue

smmsp:/var/spool/mqueue

www:/home/www

获取第1个和第6个段

4、扩展

1)有时候制表符确实很难辨认,有一个方法能够看出一段空格究竟是由若干个空格组成的仍是由一个制表符组成的。

cat tab_space.txt
this is tab finish.
this is several space      finish.
sed -n l tab_space.txt
this is tab\tfinish.$
this is several space      finish.$
看到了吧,若是是制表符(TAB),那么会显示为\t符号,若是是空格,就会原样显示。
经过此方法便可以判断制表符和空格了。
注意,上面sed -n后面的字符是L的小写字母哦,不要看错。

2)我应该在cut -d中用什么符号来设定制表符或空格呢?

其实cut的-d选项的默认间隔符就是制表符,因此当你就是要使用制表符的时候,彻底就能够省略-d选项,而直接用-f来取域就能够了。

若是你设定一个空格为间隔符,那么就这样:

cat tab_space.txt |cut -d ' ' -f 1
this
this
注意,两个单引号之间可确实要有一个空格哦,不能偷懒。
并且,你只能在-d后面设置一个空格,可不准设置多个空格,由于cut只容许间隔符是一个字符。

 cat tab_space.txt |cut -d ' ' -f 1
cut: the delimiter must be a single character
Try `cut --help' for more information.

3)cut有哪些缺陷和不足?

猜出来了吧?对,就是在处理多空格时。
若是文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,由于cut只擅长处理“以一个字符间隔”的文本内容


备注:英文用法帮助参考

Usage: cut OPTION... [FILE]...

Print selected parts of lines from each FILE to standard output.

Mandatory arguments to long options are mandatory for short options too.

  -b, --bytes=LIST        select only these bytes 

  -c, --characters=LIST   select only these characters

  -d, --delimiter=DELIM   use DELIM instead of TAB for field delimiter

  -f, --fields=LIST       select only these fields;  also print any line

                            that contains no delimiter character, unless

                            the -s option is specified

  -n                      with -b: don't split multibyte characters

      --complement        complement the set of selected bytes, characters

                            or fields

  -s, --only-delimited    do not print lines not containing delimiters

      --output-delimiter=STRING  use STRING as the output delimiter

                            the default is to use the input delimiter

      --help     display this help and exit

      --version  output version information and exit


Use one, and only one of -b, -c or -f.  Each LIST is made up of one

range, or many ranges separated by commas.  Selected input is written

in the same order that it is read, and is written exactly once.

Each range is one of:


  N     N'th byte, character or field, counted from 1

  N-    from N'th byte, character or field, to end of line

  N-M   from N'th to M'th (included) byte, character or field

  -M    from first to M'th (included) byte, character or field


With no FILE, or when FILE is -, read standard input.

相关文章
相关标签/搜索