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

Shell学习--正则表达式

[复制链接]

尚未签到

发表于 2018-8-29 08:48:20 | 显示全部楼层 |阅读模式
  1.解释:指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。
  作用对象:字符串
  很多运用在文档编辑器或者其他工具里,被用来检索和替换符合模式的文本内容。
  常用grep,sed,awk
  2.grep  过滤,打印
  -i忽略大小写;-n显示行号;-c统计符合要求的行数;-v打印不符合要求的行;-An打印符合有的行及其下n行;-Bn其上n行;-Cn上下n行。
  grep 'halt' -n -A2 /home/jason/passwd打印符合要求的行及后两行,并加行号显示
  grep 'bash' -c passwd打印符合要求的行的行数
  grep -nv 'nologin' passwd打印不带nologin的行,并显示行号
  grep '[0-9]' passwd打印所有包含数字的行
  grep -v '^#' inittab打印所有不以#开头的行
  grep -v '^#' /home/jason/inittab |grep -v '^$'打印所有不以#开头,且非空的行
  vim greptest2.txt
  123
  abc
  456
  abc2345
  #ljadj
  grep '^[^a-zA-Z]' greptest2.txt打印不以字母开头的行,[^]表否定,除[]内字符之外的字符
  grep '[^a-zA-Z]' greptest2.txt包含除字母之外的字符
  3.过滤任意字符和重复字符
  .  表示一个任意字符,*  表示零个或者多个前面的字符
  grep 'r..o' passwd打印r与o之间有任意两个字符
  grep 'ooo*' passwd  打印oo后面跟零个或者多个o
  grep '.*' passwd  打印零个或多个任意字符,空行也包含。
  grep 'o\{2\}' passwd 打印o重复出现两次的行,\为脱意字符,{}内部为数字,'o\{n1,n2\}'则表示范围
  5.查找、替换 sed
  只对文档的显示结果做相应处理,-i才对文件的实际内容作直接修改
  sed -n '2'p passwd 打印第2行
  sed -n '1,$'p passwd 打印所有行
  sed -n '1,3'p passwd 打印指定区间
  sed -n '/root/'p test.txt 打印包含root字符串的行
  sed -n '/^1/'p test.txt 打印以1开头的行
  sed -n '/in$/'p test.txt 打印以in结尾的行
  sed -n '/r..o/'p test.txt 打印r与o之间隔两个任意字符的行
  sed -n '/ooo*/'p test.txt 打印oo之后跟零个或者多个o行
  -e实现多个行为组合
  sed -e '1'p -e '/111/'p -n test.txt
  删除某行或者多行
  sed '1'd test.txt 删除第1行
  sed '1,3'd test.txt 删除1-3行
  sed '/oot/'d test.txt 删除包含oot字符串的行
  替换字符和字符串
  sed '1,2s/ot/to/g' test.txt 将第1,2行中字符串ot替换成to,s///g全局替换
  sed 's/[0-9]//g' test.txt 将文档中所有数字删除,即替换成空
  sed 's/[a-zA-Z]//g' test.txt 将字母全部删除
  sed 's/\(rot\)\(.*\)\(bash\)/\3\2\1/' test.txt 将文档中rot和bash字符串位置替换
  直接修改文件
  sed -i 's/ot/to/g' test.txt  对文档直接修改,最好先复制备份。
  4.awk工具使用,替换功能要结合sed一起使用
  awk工具使用比sed复杂,针对文档操作,一行一行执行
  head -n2 passwd |awk -F':' '{print $1}' 以:为分隔符,并答应第一个字段
  head -n2 passwd |awk -F':' '{print $0}' 打印整行,$0表示整行
  head -n2 passwd |awk -F':' '{print $1"#"$2"#"$3}' 打印第1,2,3个字段,并以#为分隔
  awk '/oo/' test.txt 匹配oo字符串的行
  awk -F':' '$1 ~/oo/' test.txt 以:为分隔符,并且打印第1个字段匹配oo的行,
  ~ 匹配字符串
  awk -F':' '/root/ {print $1,$3} /test/ {print $1,$3}' /home/jason/passwd
  同时匹配多个字符串,这是sed不具备功能。
  4.1 条件操作符 ==,>,>=,=500的行
  awk -F':' '$7!="/sbin/nologin"' passwd 第7字段不匹配/sbin/nologin的字符串
  awk -F':' '$35 && $35 || $7=="/bin/bash"' passwd 打印第3字段>5,第7字段匹配/bin/bash
  4.2 内置变量 NF (分隔符后分隔后共有多少个字符段), NR(行数)
  head -n3 passwd | awk -F':' '{print NF}'  NF多少段
  head -n3 passwd | awk -F':' '{print $NF}' $NF打印最后一段的值
  head -n3 passwd |awd -F':' '{print NR}' 打印行号
  awk 'NR>20' passwd 打印行号大于20的行
  awk 'NR>20 && $1 ~/ssh/' passwd 打印行号大于20,并且第1字段匹配ssh的行
  4.3 awk的数学运算
  head -n2 passwd |awk -F':' '$1="root"' 第1段修改为root,$1=="root"表示对第1段的值匹配 , $1="root"表示对第1段的值修改,赋值。
  head -n2 passwd |awk -F':' '{$7=$3+$4;print $0}' 将第3段和第4段的值赋第7段,并打印全段
  awk -F':' '{tot=tot+$3};END{print tot}' passwd 计算第3段总和,END表示所有行都执行了
  awk -F':' '{if($1=="root") print $0}' passwd 使用if语句判断第一字段是否为root,成立则打印改行


运维网声明 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-557954-1-1.html 上篇帖子: shell脚本之脚本接收选项 下篇帖子: shell 读取配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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