Linux/Unix中的cut命令用来从每一行文本中选择一部分,通过指定分隔符,可以选出指定的某些行或者列,也可以选出某个范围的字符。
下面的所有例子都是基于file.txt文件,文件内容可通过cat命令查看:
> cat file.txt unix or linux os is unix good os is linux good os
通过-c选项可以指定要选择输出的文本字节位置
cut -c4 file.txt x u l
通过以逗号来分割多个整数,也可以打印多个位置的文本
cut -c4,6 file.txt xo ui ln
2. 打印连续范围的字符内容
通过-c选项,短横线连接两个整数,就可以将某个连续范围的字符打印出来。
cut -c4-7 file.txt x or unix linu
如果不指定起始位置,则从头开始输出,如下例:
cut -c-6 file.txt unix o is uni is lin
类似的,如果不指定结束位置,则将从起始位置到行末的所有文本都打印出来,如下例:
cut -c10- file.txt inux os ood os good os
cut -c- file.txt
就像awk命令一样,可以通过-d选项指定每一行文本的分隔符,然后再用-f选项指定要抽取哪些字段作为最终的输出结果。
cut -d' ' -f2 file.txt or unix linux上述命令定义空格为一行的分隔符,并将每一行的第二个字段打印出来。
类似于上面的情形,在-f选项中可以指定若干个离散的数字,会将这些字段打印出来:
cut -d' ' -f2,3 file.txt or linux unix good linux good
注:如果指定的分隔符不存在,会将整行内容打印出来。
4. 通过分隔符输出连续范围的字段内容
在-f选项中可以指定一个起始范围和结束范围
cut -d' ' -f1-3 file.txt
不指定起始位置,则默认从头开始
cut -d' ' -f-3 file.txt上述命令将前三个字段都打印出来
不指定结束位置,则默认到每一行的末尾
cut -d' ' -f2- file.txt
文件/etc/passwd的内容是通过‘:’分隔的,因此可用如下命令:
cut -d':' -f1 /etc/passwd
> cat filenames.txt logfile.dat sum.pl add_int.sh
rev filenames.txt | cut -d'.' -f1