shell脚本--cut命令
2017-09-14 16:30
253 查看
本文目录:
1.1 选项说明
1.2 按字段筛选
1.3 使用--complement
1.4 按字节或字符分割
1.5 使用--output-delimiter
1.6 cut中的范围指定
假设/tmp/abc.sh中下面所示的内容。注意:第2行到第5行每列不是都以单个空格分隔的,有的地方重复了几个空格,有的地方只有一个空格,也就是说,文本内容不是很规则。并且最后一行完全没有空格。
下面是cut的示例。
可以看到,输出的是乱七八糟的非预期结果。原因就是分隔符空格在分隔的地方重复了多次。所以想要正确显示结果,需要把重复空格处理掉。
可以使用tr工具来压缩连续字符。
但是输出中的最后一行中完全没有定界符的行也输出了,这需要使用-s来取消这样的输出。
使用-b来按字节筛选,使用-c按字符分割。
注意,按字节或字符分割时将不能指定-d,因为-d是划分字段的。
由于筛选中文,结果中出现乱码。
![](https://images2017.cnblogs.com/blog/733013/201709/733013-20170914163557547-68088251.png)
所以"-b"选项需要结合"-n"选项,以禁止"-b"选项将多字节的字符强行分割导致乱码。
也可以按字符分隔。
使用-b或者-c分隔了多段字符时,可以使用--output-delimiter,否则这些多段将拼接在一起。
范围交叉时,不会重复输出。比如-f3-5,4-6,则输出-f3-6。
如果范围顺序无序,则Linux会先对范围排序(升序)再输出。例如-f4-6,2等价于-f2,4-6。
回到系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
1.1 选项说明
1.2 按字段筛选
1.3 使用--complement
1.4 按字节或字符分割
1.5 使用--output-delimiter
1.6 cut中的范围指定
1.1 选项说明
cut命令将行按指定的分隔符分割成多列,它的弱点在于不好处理多个分隔符重复的情况,因此经常结合tr的压缩功能。-b:按字节筛选;
-n:与"-b"选项连用,表示禁止将字节分割开来操作;
-c:按字符筛选;
-f:按字段筛选;
-d:指定字段分隔符,不写-d时的默认字段分隔符为"TAB";因此只能和"-f"选项一起使用。
-s:避免打印不包含分隔符的行;
--complement:补足被选择的字节、字符或字段(反向选择的意思或者说是补集);
--output-delimiter:指定输出分割符;默认为输入分隔符。
假设/tmp/abc.sh中下面所示的内容。注意:第2行到第5行每列不是都以单个空格分隔的,有的地方重复了几个空格,有的地方只有一个空格,也就是说,文本内容不是很规则。并且最后一行完全没有空格。
[root@xuexi tmp]# cat abc.sh NO Name SubjectID Mark 备注 1 longshuai 001 56 不及格 2 gaoxiaofang 001 60 及格 3 zhangsan 001 50 不及格 4 lisi 001 80 及格 5 wangwu 001 90 及格 djakldj;lajd;sla
下面是cut的示例。
1.2 按字段筛选
在abc.sh中有5个字段。筛选出第二字段name列和第4字段mark列。使用空格作为分隔符。[root@xuexi tmp]# cut -d" " -f2,4 abc.sh Name 001 50 djakldj;lajd;sla
可以看到,输出的是乱七八糟的非预期结果。原因就是分隔符空格在分隔的地方重复了多次。所以想要正确显示结果,需要把重复空格处理掉。
可以使用tr工具来压缩连续字符。
[root@xuexi tmp]# cat abc.sh | tr -s " " | cut -d " " -f2,4 Name Mark longshuai 56 gaoxiaofang 60 zhangsan 50 lisi 80 wangwu 90 djakldj;lajd;sla
但是输出中的最后一行中完全没有定界符的行也输出了,这需要使用-s来取消这样的输出。
[root@xuexi tmp]# cut -d" " -f2,4 abc.sh -s Name Mark longshuai 56 gaoxiaofang 60 zhangsan 50 lisi 80 wangwu 90
1.3 使用--complement
输出除了第2字段和第4字段其余的所有字段。[root@xuexi tmp]# cut -d" " -f2,4 abc.sh -s --complement NO SubjectID 备注 1 001 不及格 2 001 及格 3 001 不及格 4 001 及格 5 001 及格
1.4 按字节或字符分割
英文和阿拉伯数字是单字节字符,中文是双字节字符,甚至是3字节字符。使用-b来按字节筛选,使用-c按字符分割。
注意,按字节或字符分割时将不能指定-d,因为-d是划分字段的。
[root@xuexi tmp]# cut -b1-3 abc.sh # 筛选第1-3个字节的内容 NO 1 l 2 g 3 z 4 l 5 w dja
由于筛选中文,结果中出现乱码。
[root@xuexi tmp]# cut -b20 abc.sh
![](https://images2017.cnblogs.com/blog/733013/201709/733013-20170914163557547-68088251.png)
所以"-b"选项需要结合"-n"选项,以禁止"-b"选项将多字节的字符强行分割导致乱码。
[root@xuexi tmp]# cut -n -b20 abc.sh a 不 0 及
也可以按字符分隔。
[root@xuexi tmp]# cut -c20 abc.sh a 不 0 及
1.5 使用--output-delimiter
使用"--output-delimiter"指定输出分隔符。使用-b或者-c分隔了多段字符时,可以使用--output-delimiter,否则这些多段将拼接在一起。
[root@xuexi tmp]# cut -b3-5,6-8 abc.sh # 拼接在一起 Name longsh gaoxia zhangs lisi 0 wangwu akldj; [root@xuexi tmp]# cut -b3-5,6-8 abc.sh --output-delimiter "," # 逗号分隔多段 Na,me lon,gsh gao,xia zha,ngs lis,i 0 wan,gwu akl,dj;
1.6 cut中的范围指定
可以使用"N-"、"N-M"和"-M"分别表示每行N字符(或字节或字段)后的所有内容、N-M段内容和M段之前的内容。注意包括N和M的边界。[root@xuexi tmp]# cut -d" " -f3- abc.sh -s # 输出第三字段和后面所有的内容 SubjectID Mark 备注 001 56 不及格 001 60 及格 001 50 不及格 001 80 及格 001 90 及格
范围交叉时,不会重复输出。比如-f3-5,4-6,则输出-f3-6。
[root@xuexi tmp]# cut -d" " -f3-5,4-6 abc.sh -s # 范围交叉 SubjectID Mark 备注 001 56 不及格 001 60 及格 001 50 不及格 001 80 及格 001 90 及格
如果范围顺序无序,则Linux会先对范围排序(升序)再输出。例如-f4-6,2等价于-f2,4-6。
[root@xuexi tmp]# cut -d" " -f4-6,2 abc.sh -s Name Mark 备注 longshuai 56 不及格 gaoxiaofang 60 及格 zhangsan 50 不及格 lisi 80 及格 wangwu 90 及格
回到系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html
转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/7521357.html
注:若您觉得这篇文章还不错请点击下右下角的推荐,有了您的支持才能激发作者更大的写作热情,非常感谢!
相关文章推荐
- shell脚本--cut命令与awk简单使用
- shell 脚本 cut命令
- shell 脚本之 cut awk sed 命令详解
- shell脚本学习-11(cut命令学习)
- shell脚本学习-11(cut命令学习)
- Shell 命令--cut--总结自《Linux Shell 脚本攻略》
- shell脚本--检查文件是否存 cut命令详解
- Linux 下Shell 脚本几种基本命令替换区别
- test命令在shell脚本中的应用
- shell基础之脚本执行,命令别名以及快捷键等
- Linux执行shell脚本方式及区别&命令后台运行
- inux C程序中获取shell脚本输出(如获取system命令输出)
- Linux下shell脚本export命令
- 8.10 shell特殊符号cut命令 8.11 sort_wc_uniq命令 8.12 tee_tr_split命令 8.13 shell特殊符号下
- BAT脚本如何自动执行 adb shell 以后的命令
- 执行系统命令并且将输出写到指定日志文件的shell脚本(1)
- shell脚本调试命令
- shell脚本中常用命令
- shell脚本结构、date命令、变量 shell脚本中的逻辑判断 文件目录属性判断 if特殊用法 case判断
- shell脚本:test命令 if-then for while 学习笔记