linux cut命令怎么用?linux cut常用格式语法使用例子教程

7230.com   2016-12-16 08:15

  例子如下:

  [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2

  ?

  ?

  ?

  ?

  [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2

  [rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3

  星

  星

  星

  星

  (7)域是怎么回事呢?解释解释:)

  为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

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

  以/etc/passwd的前五行内容为例:

  [rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5

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

  bin:x:1:1:bin:/bin:/sbin/nologin

  daemon:x:2:2:daemon:/sbin:/sbin/nologin

  adm:x:3:4:adm:/var/adm:/sbin/nologin

  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  [rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1

  root

  bin

  daemon

  adm

  lp

  看到了吧,用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了!呵呵 有成就感吧!

  当然,在设定-f时,也可以使用例如3-5或者4-类似的格式:

  [rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5

  root:0:0:root

  bin:1:1:bin

  daemon:2:2:daemon

  adm:3:4:adm

  lp:4:7:lp

  [rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7

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

  bin:1:1:bin:/sbin/nologin

  daemon:2:2:daemon:/sbin/nologin

  adm:3:4:adm:/sbin/nologin

  lp:4:7:lp:/sbin/nologin

  [rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f -2

  root:x

  bin:x

  daemon:x

  adm:x

  lp:x

  (8)如果遇到空格和制表符时,怎么分辨呢?我觉得有点乱,怎么办?

  有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。

  [rocrocket@rocrocket programming]$ cat tab_space.txt

  this is tab finish.

  this is several space finish.

  [rocrocket@rocrocket programming]$ sed -n l tab_space.txt

  this is tab\tfinish.$

  this is several space finish.$

  看到了吧,如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。

  通过此方法即可以判断制表符和空格了。

  注意,上面sed -n后面的字符是L的小写字母哦,不要看错。

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

  其实cut的-d选项的默认间隔符就是制表符,所以当你就是要使用制表符的时候,完全就可以省略-d选项,而直接用-f来取域就可以了。

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

  [rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1

  this

  this

  注意,两个单引号之间可确实要有一个空格哦,不能偷懒。

  而且,你只能在-d后面设置一个空格,可不许设置多个空格,因为cut只允许间隔符是一个字符。

  [rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1

  cut: the delimiter must be a single character

  Try `cut --help' for more information.

  (10)cut有哪些缺陷和不足?

  猜出来了吧?对,就是在处理多空格时。

  如果文件里面的某些域是由若干个空格来间隔的,那么用cut就有点麻烦了,因为cut只擅长处理“以一个字符间隔”的文本内容

新闻推荐

加载更多...
频道推荐
  • 八项规定一子落地,作风建设满盘皆活
  • 今日(5月12日)最新油价:92,95号汽油最新
  • 卢秀燕将于三阶罢免投票前表态选国民党主席
  • 24小时新闻排行榜