Press "Enter" to skip to content

Linux Shell之cut用法

cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,grep、awk命令是筛选出特定的行,cut命令则是筛选出特定的列。

(1)cut命令参数
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数

-b :输入每行第n个字符(半角,注意如果有中文将乱码)。
-c :输入每行第n个字符(适用中文)。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符(例如中文)。仅和-b标志一起使用。

(2)cut命令用法实例

$ who | cut -b 3         #提取每行第3个字符(如果有中文字符将乱码)
$ who | cut -b 3-5,8     #提取每行第3、4、5个字符和第8个字符
$ who | cut -b -3        #提取每行第1-3个字符(即前3个字符)
$ who | cut -b 3-        #提取每行第3个至最后一个字符
$ cut -c 3 ch.txt       #提取每行第3个字符(适用中文)
$ cat /etc/passwd | head -n 5 | cut -d : -f 1    #提取passwd文件中的前5个用户名(以冒号作为分割符)
$ cat /etc/passwd | head -n 5 | cut -d : -f 1,3-5,7
$ cat /etc/passwd | head -n 5 | cut -d : -f -2
$ cat space.txt |cut -d ' ' -f 1                 #提取space.txt中每行的第一个单词(以空格作为分割符)

要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。可不能颠倒定位的顺序哦。例如以下命令的结果是一样的:

$ who | cut -b 3-5,8
$ who | cut -b 8,3-5

当遇到多字节字符(中文)时,可以使用-n选项,-n用于告诉cut不要将多字节字符拆开。例子如下:

$ cat ch.txt
星期一
星期二
星期三
星期四
$ cat ch.txt | cut -b 2
�
�
�
�
$ cat ch.txt | cut -nb 2

$ cat ch.txt | cut -nb 1,2,3
星
星
星
星
Leave a Reply

Your email address will not be published. Required fields are marked *