命令选项
cut命令主要用于截取一行字符中的若干个,命令选项有:
-b 根据字节来截取,忽视多字节字符比如汉字,可以配合[-n]选项来忽视不完整的多字符
-c 根据字符来截取,多字节字符当作一个字符
-d 根据字段来截取时,定义分割字符,默认是TAB。配合[-f]输出指定的字段
-f 根据字段来截取时,输出指定的字段
-n 截取后忽略不完整的字符,配合[-b]使用。
-s 根据字段来截取时,忽略不包含分隔符的行,配合[-d]使用
字节截取和字符截取
使用方法:
cut -b LIST
cut -c LIST
LIST为要输出的字节位置,可以指定位置也可以指定区间,例如1,3,5为第1、第3和第5个字节,1,3-5为第1、第3、第4和第5个字节。
cut -b 与 cut -c 的区别在于多字节字符的处理上,比如汉字占两个字节。从下面的例子可以看出两者的区别:
$echo "昨夜星辰"|cut -b 1
?
$echo "昨夜星辰"|cut -b 1,2
昨
$echo "昨夜星辰"|cut -b 1-3
昨?
$echo "昨夜星辰"|cut -c 1
昨
$echo "昨夜星辰"|cut -b 1,2
昨夜
$echo "昨夜星辰"|cut -b 1-3
昨夜星 在cut -d里面配合[-n]选项来忽视不完整的字符,例如:
$echo "昨夜星辰"|cut -b 1-3
昨?
$echo "昨夜星辰"|cut -nb 1-3
昨
字段截取
cut还可以根据字段截取行字符,默认字段分隔符为TAB制表符,可以使用[-d]来指定分隔符,分隔符限定为单字符。特别需要注意的是,多字节字符也是单字符,下面例子中会有展示。
配合[-s]选项,可以忽略不包含分隔符的行。例如某个文件naro.aix内容如下,里面没有TAB全是空格:
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Oct09 ? 00:00:13 init [5]
root 2 1 0 Oct09 ? 00:00:06 [ksoftirqd/0]
root 3 1 0 Oct09 ? 00:00:05 [events/0]
root 4 3 0 Oct09 ? 00:00:00 [khelper] 字段截取使用方法如下:
$cat naro.aix|cut -d : -f 2
UID PID PPID C STIME TTY TIME CMD
00
00
00
00
$ cut-sd : -f 2 naro.aix
00
00
00
00
$echo "昨夜星辰"|cut -d 星 -f 2
辰
最后一个例子可以看出,在字段截取时是按照字符而不是字节来划分的。