设为首页 收藏本站
查看: 931|回复: 0

shell脚本学习笔记之文本处理命令

[复制链接]

尚未签到

发表于 2018-8-29 07:28:24 | 显示全部楼层 |阅读模式
  shell脚本学习笔记之文本处理命令
  一.cut (截取文本字符或域字段)
  命令格式:cut [option] file
  1.-d和-f的组合用法,用来截取字段
  说明:*表示分隔符,如-,:,空格字符等
  N表示第N个字段
  用法一:cut -d* -fN       从文本中截取每行以某个特定符号为分隔符的某个域字段
  例子:cut -d:-f1       从文本中截取每行以冒号(:)为分隔符的第一个域字段
  用法二:cut -d* -fNm-n    从文本中截取每行相邻的多个域字段
  例子:cut -d:-f1-3     从文本中截取每行以冒号(:)为分隔符的多个域字段
  用法三:cut -d* -fNm,n    从文本中截取每行不相邻的多个域字段
  例子:cut -d: -f1,3     从文本中截取每行的第一个到第三个字符
  2.-c用法     用来截取字符
  用法一:cut -cN           从文本中截取一个字符
  例子:cut -c1           从文本中截取每行的第一个字符
  用法二:cut -cNm-n        从文本中截取每行相邻的多个字符多个字符
  例子:cut -c1-5         从文本中截取每行的第一个到第五个字符
  用法三:cut -cNm,n        从文本中截取每行不相邻的多个字符
  例子:cut -c1,5         从文本中截取每行字符中的第一个和第五个字符
  ***  注意:
  1.cut命令只能截取单个文件中的字符或域字段
  2.cut命令截取的字符或域字段是从所有行中截取的以列的形式显示到屏幕,而不是从某行或某些行中截取,也就是说cut命令不具备截取特定行特定字符或特定行特定域字段,只能从文本中所有行中截取,一般cut命令是针对具有某种排列次序的文本来使用的文本处理命令。
  ___________________________________________________________________________
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  二.uniq (去除文本中的重复行)
  命令格式:uniq [option] file
  1.uniq -c  显示文本中相同行连续重复的次数
  例子1:[root@node1 tmp]# uniq -c job
  2 ggg
  2 jjjjjjjjjjjj
  例子2:[root@node1 tmp]# uniq -c job
  2 ggg
  2 jjjjjjjjjjjj
  1 ggg
  1 jjj
  2.uniq -d   显示文本中重复的行(只显示一次)
  例子:       [root@node1 tmp]# uniq -d job
  ggg
  jjjjjjjjjjjj
  3.uniq -u   显示文本中没有连续重复的行
  例子:       [root@node1 tmp]# uniq -u job
  ggg
  jjj
  ***注意:
  这里要着重理解连续重复和重复所代表不同意义
  _______________________________________________________________________
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  三.paste(将不同文本中的数据合到新的文本)
  命令格式:paste [option] file1 file2
  1.paste file1 file2  将file1文本中的内容和file2文本中的内容显示为一个文本,同时将file1的内容作为第一个域字段,分隔符为tab(n个空格) 而file1作为第二个域字段显示,反之一样
  例子:  [root@node1 test]# paste passwd shadow
  1.root:x:0:0:root:/root:/bin/bash root:$1$sovZvvQl$8HOSTtnMubbEdswFA3lnI/:16393:0:99999:7:::
  bin:x:1:1:bin:/bin:/sbin/nologin bin:*:16393:0:99999:7:::
  2.daemon:x:2:2:daemon:/sbin:/sbin/nologin daemon:*:16393:0:99999:7:::
  3.adm:x:3:4:adm:/var/adm:/sbin/nologin adm:*:16393:0:99999:7:::
  4.lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin lp:*:16393:0:99999:7:::
  5.sync:x:5:0:sync:/sbin:/bin/sync sync:*:16393:0:99999:7:::
  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown shutdown:*:16393:0:99999:7:::
  6.halt:x:7:0:halt:/sbin:/sbin/halt halt:*:16393:0:99999:7:::
  2.paste -d* file1 file2  使用*(*可以为:或-或其他字符)为分隔符显示file1和file2组合后的新文本
  例子:[root@node1 tmp]# paste -d- a b
  jjj-kkk
  3.paste -s file file2    将file1文本和file2文本以横向放入同一个文本中,也就是说先放file1文本,然后在下一行放                            file2文本,也就说新的文本只有两行,即file1为一行,file2为另一行
  4.paste -d* -s file file2  将file1文本和file2文本中本来不同行使用*分隔符区分,也就是说,原来的文本的每行内容之前用*分隔符作为域字段区分,而文本之间则以行区分。
  例子:[root@node1 tmp]# cat m n
  a
  b
  c
  o
  p
  q
  [root@node1 tmp]# paste -d: -s m n
  a:b:c:
  o:p:q
  5.ls | paste -d“ ” - - -  
  例子:[root@node1 tmp]# ls | paste -d" " - - - - -  -选项必须和ls及|结合使用
  a b job m n
  test tom
  ***注意:paste命令需要理解横行,竖行,字段的转变
  ____________________________________________________________________________________
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  四、cat(一次性显示文本所有内容)
  cat [option] filename
  1.cat -A filename    显示文本所有内容
  2.cat -b filename    将文本中的行用编号进行排序显示(空白行不编号)
  3.cat -E filename    在文本的每行末尾显示$符号
  4.cat -n filename    将文本中的行用编号进行排序
  5.cat -s filename    将文本中连续的多个空白行显示为一个空白行
  6.cat -v filename    将文本中不可显示的字符(如制表符,新行符合换行符除外)显示出来
  ____________________________________________________________________________
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  五,more(以屏幕为单位逐屏显示文本内容)
  more [option] filename
  1.more -N filename   一次显示N行内容至屏幕
  2.more -d  filename  用于提示使用者如何逐屏查看文本内容和如何退出查看
  3.more -f filename   计算行数时,以实际行计数,而不是自动换行后的计数
  4.more -p filename   不以逐屏形式显示文本内容,而是先清除屏幕显示的文本内容,再显示其他内容
  5.more -c filename   先显示内容,再清除屏幕
  6.more -s filename  将多行空白行以一行计数
  7.more +/ filename  通过搜索字符串来开始显示字符串后所有内容
  8.more +n filename  通第n行开始显示文本内容
  _______________________________________________________________________________
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  六、head
  head [option] filename
  1.head -N file     N表示查看文本前N行
  例子
  head -8 file     查看文本前8行
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++
  七.tail
  tail  [option] filename
  1.tail -N file    N表示查看文本后N行
  例子
  tail -8 file     查看文本后8行
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  八.less
  less file  逐屏查看文本内容
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  九.split  ----将一个大文件切割成多个小文件,并在小文件中自动编号
  split [option] 带切割的大文件 输出的小文件
  选项
  -或-l 这两个选项等价,都用于指导切割成小文件行数
  -b    指导切割成小文件的字节
  -C    与-b选项类似,不过,切割时尽量维持每行的完整性
  例子
  split -2 file    将文本按每两行生成一个文件
  split -b50 file    将文件以50个字节为一个文件进行分割
  split -C50 file      在以文本内容记录完整性为前提下,进量保证以50字节为为一个文件                      个文件进行分割
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  十.join  ----用于实现将两个文件中具有相同域的记录选择出来的连接操作
  选项
  -a1或-a2  除了显示以共同域进行连接的结果外,-a1表示还显示第二个文件中没有共同域的记录
  -i        比较域内容时,忽略大小写差异
  -o        设置结果显示的格式
  -t        改变域分隔符
  -v1或-v2   与-a选项类似,但是不显示以共同域进行连接的结果
  -1和-2    -1用于设置文件1用于链接的域,-2用于设置文件2用于连接的域
  语法:join [选项] 文件1 文件2
  1.-a和-v选项
  例子
  join -t:  file1 file2  只显示file1和file2中可以连接的行
  join -t: -a1 file1 file2   除了显示可以连接的行,还显示file1的所有未连接的文件
  join -t:  -a2 file1 file2   除了显示可以连接的行,还显示file2的所有未俩件的文件
  join -t: -v1 file1 file2   只显示file1中未连接的行
  join -t: -v2 file1 file2   只显示file2中未连接的行
  2.-o选项  ---用于改变结果显示的格式
  例子
  join -t: -o11.1 2.2 .12 file1 file2
  显示的格式为依次显示第1个文件中的第一个域、第2个文件的第2个域、第1个文件的第2个域
  3.-1和-2选项  用于设置文件所链接的域
  例子
  join -t: -i -1 3 -2 1 file1 file2
  以文件1的第3域和文件2的第1域进行连接,并忽略大小写
  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  十一、tr (用于字符转换)
  tr [选项] 字符串1 字符串2

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-557906-1-1.html 上篇帖子: "shell in" & "find exclude" 下篇帖子: shell自动创建mysql数据表
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表