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

Linux shell编程学习实例与参数分析(三)

[复制链接]

尚未签到

发表于 2018-8-22 07:25:20 | 显示全部楼层 |阅读模式
  第五章 文本过滤
  1.正则表达式
  一种用来描述文本模式的特殊语法,由普通字符以及特殊字符(元字符)组成
  ^    ----只匹配行首
  $    ----只匹配行尾
  *    ----匹配0个或多个此单字符
  []   ----只匹配[]内字符,可以使用-表示序列范围[1-5]
  \    ----屏蔽一个元字符的特殊含义
  .    ----匹配任意单字符
  pattern\{n\} 只用来匹配前面pattern出现的次数,n为次数
  pattern\{n,\}只用来匹配前面pattern出现的次数,至少为n
  pattern\{n,m\}只用来匹配前面pattern出现的次数,次数在n-m之间
  eg:
  A\{3\}B   AAAB
  A\{3,\}B AAAB AAAAB ...
  A\{3,5\}B AAAB AAAAB AAAAAB
  2.find命令     ----查找文件和目录
  find pathname -options [-print -exec -ok]
  pathname --查找的目录路径. .--表示当前目录,/表示根目录
  -print 输出
  -exec 对匹配的文件执行该参数所给出的shell命令,相应命令形式为'command'{} \;'    注意{}和\;之间的空格
  -ok    与-exec相同,不过执行命令前会有提示
  options   :
  -name
  -perm
  -user
  -group
  -mtime -n +n (atime,-ctime) 修改时间(访问时间,创建时间)
  -size n[c]
  -type 查找某一类型的文件
  eg.
  [test@szbirdora 1]$ find ./ -mtime +5
  ./helloworld.sh
  ./nohup.out
  查看./目录(当前)下修改时间超过5天的文件
  3.grep介绍
  grep -c 输出匹配行计数
  grep -i 不区分大小写
  grep -h 查询多文件时不显示文件名
  grep -H 显示文件名
  grep -l 查询多文件时只输出包含匹配字符的文件名
  grep -n 显示匹配行及行号
  grep -s 不显示不存在或不匹配文本的错误信息
  grep -v 显示不包含匹配文本的所有行(过滤文本)
  eg.
  [test@szbirdora 1]$ grep -n 's.a' myfile
  2:/dev/sda1              20G 3.3G   16G 18% /
  4:/dev/sda2              79G   18G   58G 23% /u01
  5:/dev/sda4              28G 3.9G   22G 15% /u02
  [test@szbirdora 1]$ grep -n '2$' myfile
  5:/dev/sda4              28G 3.9G   22G 15% /u02
  grep -options '正则表达式' filename
  4.sed介绍
  sed不与初始化文件打交道,它操作的只是一个拷贝,然后所有的改动如果没有重定向到一个文件将输出到屏幕
  sed是一种重要的文本过滤工具,使用一行命令或使用管道与grep与awk相结合。
  sed调用:
  1.命令 sed [options] '正则表达式sedcommand' input-files
  2.script :sed [options] -f sedscript input-files
  sed在文本中查询文本的方式
  -行号,可以是简单数字,或一个行号范围
  -使用正则表达式
  x ----行号
  x,y ----行号范围从x到y
  x,y! ---不包含行号x到y
  sed命令选项:
  -n 不打印
  -c 下一个命令是编辑命令
  -f 如果正在调用sed脚本文件
  基本sed命令
  p 打印匹配行
  = 显示文本行号
  a\ 在定位行号后附加新文本信息
  i\在定位行号前插入新文本信息
  d 删除定位行
  c\用新文本替换定位文本
  s 使用替换模式替换相应模式
  r 从另一个文件中读文本
  w 写文本到一个文件
  q 第一个模式匹配完成后退去
  l 显示与八进制ascii代码等价的控制字符
  {}在定位行执行命令组
  n 从一个文件中读文本下一行,并附加在下一行
  g 将模式2粘贴到/pattern n/
  y 传送字符
  eg.
  [test@szbirdora 1]$ sed -n '2p' myfile
  c
  打印myfile第2行
  [test@szbirdora 1]$ sed -n '2,4p' myfile
  c
  f
  b
  打印第二行到第四行
  [test@szbirdora 1]$ sed -n '/a/p' myfile
  a
  打印匹配a的行
  [test@szbirdora 1]$ sed -n '2,/2/p' myfile
  c
  f
  b
  1
  2
  打印第二行到匹配'2'的行
  s命令替换
  [test@szbirdora 1]$ sed 's/b/a/p' myfile
  a
  a
  a
  c
  d
  e
  替换b为a
  多点编辑 -e
  eg. (myfile包含a-e)
  [test@szbirdora 1]$ sed -e '2d' -e 's/c/d/' myfile 11
  a
  d
  d
  e
  sed命令r ---从文件中读取选定的行,读入输入文件中,显示在匹配的行后面
  eg.
  [test@szbirdora 1]$ cat 11
  *******************Alaska***************
  [test@szbirdora 1]$ sed '/a/r 11' myfile
  a
  *******************Alaska***************
  b
  c
  d
  e
  写入命令:w   将输入文件中的匹配行写入到指定文件中
  eg.
  [test@szbirdora 1]$ cat 11
  b
  [test@szbirdora 1]$ sed -n '/a/w 11' myfile
  [test@szbirdora 1]$ cat 11
  a
  追加:a   将文本追加到匹配行的后面。sed要求在a后加\,不止一行的以\连接
  eg.
  [test@szbirdora 1]$ sed '/b/a\****************hello*************\-------------china---------' myfile
  a
  b
  ****************hello*************-------------china---------
  c
  d
  e
  插入命令:i   将文本插入到匹配行的前面。sed要求在a后加\,不止一行的以\连接
  eg.
  [test@szbirdora 1]$ sed '/b/i\
  > THE CHARACTER B IS BEST\
  > *******************************' myfile
  a
  THE CHARACTER B IS BEST
  *******************************
  b
  c
  d
  e
  下一个:n 从一个文件中读文本下一行,并附加在下一行
  退出命令 q 打印多少行后退出
  eg.
  [test@szbirdora 1]$ sed '3q' myfile
  a alert
  b best
  c cook
  sed script:
  sed -f scriptfile myfile
  5.awk介绍
  awk可从文件或字符串值基于指定规则浏览和抽取信息
  awk三种调用方式:
  1.命令行方式
  awk [-F field-sperator]'pattern{active}' input-files
  awk [-F field-sperator]'command' input-files
  awk脚本
  所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解析器作为脚本的首行,以便通过键入脚本名称来调用。
  awk命令插入一个单独文件
  awk -f awk-script-file input-files
  awk脚本由模式和动作组成
  分隔符、域、记录
  注意这里的$1,$2是域与位置变量$1,$2不一样。$0文件中的所有记录
  eg:
  awk '{print $0}' myfile
  awk 'BEGIN {print "IP DATE ----"}{print $1"\t"$4}END{print "end-of -report"}
  [test@szbirdora 1]$ df |awk '$1!~"dev"'|grep -v Filesystem
  none                   1992400         0   1992400   0% /dev/shm
  [test@szbirdora 1]$ df |awk '{if ($1=="/dev/sda1") print $0}'
  /dev/sda1             20641788   3367972 16225176 18% /
  [test@szbirdora shelltest]$ cat employee
  Tom Jones       4424    5/12/66 543354
  Mary Adams      5346    11/4/63 28765
  Sally Chang     1654    7/22/54 650000
  Billy Black     1683    9/23/44 336500
  [test@szbirdora shelltest]$ awk '/[Aa]dams/' employee
  Mary Adams      5346    11/4/63 28765
  [test@szbirdora shelltest]$ sed -n '/[Aa]dams/p' employee
  Mary Adams      5346    11/4/63 28765
  [test@szbirdora shelltest]$ grep '[Aa]dams' employee
  Mary Adams      5346    11/4/63 28765
  三种命令方式下,使用模式匹配查询
  [test@szbirdora shelltest]$ awk '{print $1}' employee
  Tom
  Mary
  Sally
  Billy
  打印文件第一列
  [test@szbirdora shelltest]$ awk '/Sally/{print $1"\t"$2}' employee
  Sally   Chang
  打印匹配Sally的行的第一列和第二列
  [test@szbirdora shelltest]$ df |awk '$4>20884623'
  Filesystem           1K-blocks      Used Available Use% Mounted on
  /dev/sda2             82567220 17488436 60884616 23% /u01
  /dev/sda4             28494620   4589172 22457992 17% /u02
  打印df输出第四列大于××的行
  格式输出:
  打印函数—
  [test@szbirdora shelltest]$ date
  Mon Mar 10 15:15:47 CST 2008
  [test@szbirdora shelltest]$ date |awk '{print "Month:" $2"\nYear:" $6}'
  Month:Mar
  Year:2008
  [test@szbirdora shelltest]$ awk '/Sally/{print "\t\tHave a nice day,"$1"\t"$2}' employee
  Have a nice day,Sally   Chang
  printf函数
  [test@szbirdora shelltest]$ echo "LINUX"|awk '{printf "|%-10s|\n",$1}'
  |LINUX     |
  [test@szbirdora shelltest]$ echo "LINUX"|awk '{printf "|%10s|\n",$1}'
  |     LINUX|
  ~匹配符
  [test@szbirdora shelltest]$ awk '$1~/Tom/{print $1,$2}' employee
  Tom Jones
  awk 给表达式赋值
  关系运算符:
  <             小于
  >             大于
  ==           等于
  !=            不等于
  >=           大于等于
    /dev/sda1              20G 3.3G   16G 18% /


运维网声明 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.iyunv.com/thread-554853-1-1.html 上篇帖子: shell 删除奇数偶数行 下篇帖子: MongoDB客户端访问 – Shell方式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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