Linux shell cut命令

作者: Viking_Den | 来源:发表于2016-08-01 22:58 被阅读1447次

    cut是以每一行为一个处理对象的。cut一般以什么为依据呢? 也就是说,我怎么告诉cut我想定位到的剪切内容呢?

    cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。

    如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

    主要参数

    -b :输入每行第n个字符(半角,注意如果有中文将乱码)。

    -c :输入每行第n个字符(适用中文)。

    -d :自定义分隔符,默认为制表符。

    -f :与-d一起使用,指定显示哪个区域。

    -n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。

    cut命令主要是接受三个定位方法:

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

    -b支持形如3-5的写法,而且多个定位之间用逗号隔开。

    但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。

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

    不过,看着怎么和-b没有什么区别啊?莫非-b和-c作用一样? 其实不然,看似相同,只是因为这个例子举的不好,who输出的都是单字节字符,所以用-b和-c没有区别,如果你提取中文,区别就看出来了。

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

    为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。

    如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。

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

    缺陷和不足

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

    相关文章

      网友评论

        本文标题:Linux shell cut命令

        本文链接:https://www.haomeiwen.com/subject/xkkfsttx.html