shell字符串截取(cut)
来源:互联网 发布:广东新闻大数据女主持 编辑:程序博客网 时间:2024/04/30 23:48
字符串截取操作cut,cut以行为单位进行操作。
cut命令主要是接受三个定位方法:
第一,字节(bytes),用选项-b
第二,字符(characters),用选项-c
第三,域(fields),用选项-f
-b,下面代码块中详述-b操作
//目标操作串-b [lj@localhost script]$ ps PID TTY TIME CMD 2729 pts/0 00:00:00 bash 2888 pts/0 00:00:00 vim 6145 pts/0 00:00:00 ps1. 按行操作,取每行第1-8个字符 [lj@localhost script]$ ps|cut -b 1-8 PID TT 2729 pt 2888 pt 6146 pt 6147 pt2. -b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了 [lj@localhost script]$ ps|cut -b 1-8,11 PID TT 2729 pt0 2888 pt0 6151 pt0 6152 pt0 但有一点要注意,cut命令如果使用了-b选项,那么执行此命令时,cut会先把-b后面所有的定位进行从小到大排序,然后再提取。不能颠倒定位的顺序 [lj@localhost script]$ ps|cut -b 11,1-8 PID TT 2729 pt0 2888 pt0 6153 pt0 6154 pt03. -3表示从第一个字节到第三个字节,而3-表示从第三个字节到行尾。如果你细心,你可以看到这两种情况下,都包括了第三个字节。 [lj@localhost script]$ ps|cut -b -3 P 27 28 61 61 [lj@localhost script]$ ps|cut -b 3- PID TTY TIME CMD 729 pts/0 00:00:00 bash 888 pts/0 00:00:00 vim 157 pts/0 00:00:00 ps 158 pts/0 00:00:00 cut [lj@localhost script]$ ps|cut -b -3,3-//执行ps|cut -b -3,3-,答案是输出整行,不会出现连续两个重叠的c的 PID TTY TIME CMD 2729 pts/0 00:00:00 bash 2888 pts/0 00:00:00 vim 6159 pts/0 00:00:00 ps 6160 pts/0 00:00:00 cut
-c
按照字符来操作,虽然都是对字符串的操作,但是例如中文每个字符就不是一个字节,所以-c操作与-b有所区别,但其操作写法和-b一致
//目标操作串 [lj@localhost script]$ cat cut_exp.txt 中华人民共和国 中华人民共和国 中华人民共和国 [lj@localhost script]$ cat cut_exp.txt|cut -c 3- 人民共和国 人民共和国 人民共和国
-f
为什么会有“域”的提取呢,因为刚才提到的-b和-c只能在固定格式的文档中提取信息,而对于非固定格式的信息则束手无策。这时候“域”就派上用场了。
(下面的讲解内容是在假设你对/etc/passwd文件的内容和组织形式比较了解的情况下进行的。)
如果你观察过/etc/passwd文件,你会发现,它并不像who或者ps的输出信息那样具有固定格式,而是比较零散的排放。但是,冒号在这个文件的每一行中都起到了非常重要的作用,冒号用来隔开每一个项。
我们很幸运,cut命令提供了这样的提取方式,具体的说就是设置“间隔符”,再设置“提取第几个域”,就OK了!
//以/etc/passwd的前五行内容为例:[lj@localhost script]$ cat /etc/passwd|head -n 5root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin[lj@localhost script]$ cat /etc/passwd|head -n 5|cut -d : -f 1rootbindaemonadmlp//-d设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了,在设定-f时,也可以使用例如3-5或者4-类似的格式
如果遇到空格和制表符时,有时候制表符确实很难辨认,有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。
[lj@localhost script]$ cat cut_space.txtthis is tab finish.this is several space finish.[lj@localhost script]$ sed -n l cut_space.txtthis is tab\tfinish.$this is several space finish.$
如上,如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示。通过此方法即可以判断制表符和空格了。
阅读全文
0 0
- shell字符串截取(cut)
- shell的字符串截取命令cut
- shell字符串截取之cut命令
- shell下字符串的截取----cut
- shell字符串操作之cut---实现字符串截取
- shell中字符串的截取方法、cut基本用法
- Cut截取字符串命令
- 【shell】切割字符串--cut
- shell中(字符串截取)
- shell中(字符串截取)
- shell中(字符串截取)
- shell中截取cut所不能做好的字符串的方法
- Shell编程-字符截取命令-cut命令
- shell脚本截取列cut的使用
- shell字符截取命令之cut命令
- Linux下的字符串截取命令cut
- shell中的字符串问题(截取)
- shell字符串的截取
- HDU-1789-Doing Homework again(贪心)
- 报找不到so文件时有可能的一种情况
- 一不小心入了引用类型的坑
- 处理器体系结构(了解CPU的基本运行原理)——《深入理解计算机系统》
- spring cloud之简单注册中心
- shell字符串截取(cut)
- opencv获取灰度图像直方图
- Spring MVC的UrlBasedViewResolver和InternalResourceViewResolver
- Arduino小车PID自整定调速——菜鸟也来写PID自整定库
- 快速排序及其变种 Java
- spark-2.2.0 集群安装部署以及hadoop集群部署
- 2017.08.04 通过openGL纹理在Unity中获取摄像机图像
- oracle 建表、建sequence序列、删除表中列、列加注释、增加表中列
- Spring Aspectj 代理 前置 后置 以及 异常