https://blog.csdn.net/u011700318/article/details/38554581?utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/RHEL_admin/article/details/37508101?ops_request_misc=%7B%22request%5Fid%22%3A%22158217786119725211963913%22%2C%22scm%22%3A%2220140713.130056874..%22%7D&request_id=158217786119725211963913&biz_id=0&utm_source=distribute.pc_search_result.none-task
https://blog.csdn.net/Frozen_fish/article/details/2260804?utm_source=distribute.pc_relevant.none-task
https://www.runoob.com/linux/linux-comm-cut.html
参数:
- -b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。 byte
- -c :以字符为单位进行分割。 char
- -d :自定义分隔符,默认为制表符。 define
- -f :与-d一起使用,指定显示哪个区域。 fields 一般用以指定分隔符后的第几列
- -n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的
范围之内,该字符将被写出;否则,该字符将被排除
语法: 必须指定 -b、-c 或 -f 标志之一。
- cut [-bn] [file]
- cut [-c] [file]
- cut [-df] [file]
例子:
1、英文字符
[root@rhel6164 ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
[root@rhel6164 ~]# echo $PATH | cut -d ':' -f 2,4-6 #使用:分割后,选择打印出第2,4,5,6段信息
/usr/local/bin:/bin:/usr/sbin:/usr/bin
————————————————
[root@rhel6164 ~]# echo $PATH | cut -c 2 #以字符为单位来分割,然后打印出第二个字符
u
————————————————
[root@rhel6164 ~]# echo $PATH | cut -b 2,4 #打印出第二个和第四个字节
ur
2、汉字
GBK编码下,一个汉字占2个字节;
UTF-8编码下,一个汉字占3个字节
UTF-8是一种国际通用的一种变长编码,ASCII对应的字符在UTF-8下占1个字符,西方文字(希腊文字)占2个字符,中文占用3个字节数,还有 平面符号占4个字节。
cat testch.txt
我 的 兴 趣 是
羽 毛 球 篮 球
cat testch.txt |cut -b 1-3(截取字节位置为1-3) 一个汉字相当于3个byte
我
羽
cat testch.txt |cut -c 1-2
我
羽
cat testch.txt |cut -b 3-5,8(截取字节位置为3-5和第8个字节)
3、以区域定位(有固定分隔符)
为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。如果你观察过/etc/passwd文件,你会发现,它并不像who的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。
以/etc/passwd的前五行内容为例:
[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
-d自定义分隔符(若不定义,默认分隔符为制表符),-f设置返回第几列,例如3-5或者4-类似的格式:[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 2|cut -d : -f 1,3-5
root:0:0:root
bin:1:1:bin
补充unique用法:(先sort再uniq)
uniq只作用于相邻的重复行,即相隔的重复行不会去掉;所以要先排序sort再去重uniq。
cat test.txt |cut -f 3-4,5|sort|uniq
4、区分空格符和制表符
空格符: cat xxx.txt|head -2|cut -d' ' -f 1-3
制表符: cat xxx.txt|head -2|cut -f 1-3 (默认分隔符为制表符,直接获取列即可)
A1、B1、C1所代表的行字符之间均以TAB分隔,D1却是以空格来分开的。
-s的作用:(筛选得到真正制表符的行)
第一行不含有任何TAB字符,所以直接被剔除了。
D1行,是以空格区分间距,所以也不合要求。
5、替换分隔符( --output-delimiter='#' )