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

shell学习第三天——grep、sed、awk

[复制链接]

尚未签到

发表于 2018-8-27 11:55:37 | 显示全部楼层 |阅读模式
  grep
  以前我们用grep在一个文件中找出包含某些字符串的行,比如在头文件中找出符合某个模式(Pattern)的一类字符串,例如找出所有符合xxxx@xxxx.xxx模式的字符串(也就是email地址),要求x字符是可以是字母、数字、下划线、小数点。

  字符类限定符(Character>  数量限定符(Quantifier):邮箱地址的每一部分可以有一个或者多个x字符。
  位置限定符(Achor):描述各个字符类以及普通字符之间的位置关系,例如邮件地址分为三部分,用普通字符@和.隔开。
  每一部分可以用字符类和数量限定符描述,为了表述位置关系,需要位置限定符。(有了三个概念,每次写正则表达式就不会乱了思绪)
  exe
192.168.1.1  
1234.234.04.5678
  
123.4234.045.678
  
abcde
  执行的命令为:
[12][0-9]{0,2}\.[12][0-9]{0,2}\.[12][0-9]{0,2}' exe  执行结果为:
DSC0000.png

  我们知道C的变量和shell脚本变量的定义和使用方法很不同,表达能力也不相同,C变量有各种类型,而shell脚本变量都是字符串。
  字符类
字符含义.匹配任意一个字符[]匹配括号中的任意一个字符-在[]括号内表示字符范围^位于[]内的开头,匹配出括号中的字符之外的任意一个字符  具体使用例子
DSC0001.png

  数量限定符
字符含义举例?紧跟在它前面的单元匹配零次或一次localhost bash]$ echo "hello" | grep -E --color 'hell?'  hello
+紧跟在它前面的单元应匹配一次或多次[lh@localhost bash]$ echo "helloooo" | grep -E --color 'hello+'  helloooo
*紧跟它前面的单元应匹配零次或多次[lh@localhost bash]$ echo "helloooo" | grep -E --color 'hello*'  helloooo
  [lh@localhost bash]$ echo "helloooo" | grep -E --color 'helo*'
  helloooo
  位置限定符
字符含义^匹配行首的位置$匹配行末的位置\匹配单词结尾的位置\b匹配单词开头或结尾的位置\B匹配单词开头和结尾的位置  演示结果
DSC0002.png

  例子:
  用下面的命令查找否和标准的IP号
grep -E '[1,2][0-9]{0,2}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' exe  寻找否合标准的手机号
grep -E '1[34578][0-9]{9}' exe  寻找否和标准的邮箱号
grep -E '[123456789][0-9]{4,11}@qq\.com$'  sed
  sed意为流编辑器(Stream Editor),在Shell脚本和Makefile中作为过滤器使用非常普遍,也就是把前一个程序的输出引入sed的输入,经过一系列编辑命令转换为一种格式输出。sed和vi都源于 早期UNIX的ed工具,所以很多sed命令和vi的末行命令是相同的。
  /pattern/action
  其中pattern是正则表达式,action是编辑操作。sed程序一行一行读出待处理文件,如果某一行 与pattern匹配,则执行相应的action,如果一条命令没有pattern而只有action,这个action将作用于待处理文件的每一行。sed 是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space)
  1. /pattern/p :打印匹配pattern的行(加-n后不打印原内容)
DSC0003.png

  2. /pattern/d :删除匹配pattern的行
DSC0004.png

  3./pattern/s/pattern1/pattern2/:查找符合pattern的行,将该行第一个匹配pattern1的字符串替换pattern2
DSC0005.png

  定址
  定址用于决定对哪些行进行编辑,地址的形式可以是数字,正则表达式,或者二者的结合
DSC0006.png

  以上分别是打印第三行,打印1~3行,删除2~4行
  正则表达式
  ^:行首定位符:/^my/ 匹配所有以my开头的行
  $:行尾定位符:/my$/ 匹配所有以my结尾的行
DSC0007.png

  .:匹配除换行符以外的单个字符: /m..y/ 匹配包含字母m,后跟两个任意字符,再跟字
  母y的行
DSC0008.png

  awk
  sed以行为单位处理文件,awk比sed强的地在于不仅能以行为单位还能以列为单位处理文件。awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义
  /pattern/{actions}
  和sed类似,pattern是正则表达式,actions是一系列操作。awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,则执行相应的actions,如果一条awk命令只 有actions部分,则actions作用于待处理文件的每一行。
DSC0009.png

  注:自动变量$1,$2分别表示第一列、第二列等,类似于shell脚本的位置参数,而$0表示整个位置参数。
  例子:区分出出价格小于等于2的和大于2的
DSC00010.png

  cut
  定义:正如其名,cut的工作就是剪,具体的说就是在文件中负责剪切数据,cut是以行作为处理对象的,这种机制和sed是一样的。
  cut命令主要接受三个定位方法:字节(bytes)用选项-b,字符(character)用选项-c
DSC00011.png

  sort
  sort将文件的每一行作为一个单位,相互比较,比较原则是首字符向后,依次按ASCII码比较,最后按升序输出。
DSC00012.png

  sort 的-u选项(作用;就是在输出行中除去重复行)
DSC00013.png

  sort的-r选项(sort默认排序方式是升序,如果想改成降序,加上选项-r)
sort -r test  sort的-o选项(用于将结果写入文件)
sort -r test -o newtest  sort的-n选项
  之前有些的排序将数字按字符来排序,使得10排在2前面,加上-n选项后,使得排序按数值来排序。
  sort的-t选项和-k选项
  例子:以第二行为例进行排序
DSC00014.png

  分析:
sort -n -t':'-k 2 product  -n:以整数排列
  -t:以分隔符“:”进行排列
  -k:对第二列进行sort操作
DSC00015.png

  按照第一列的第二个进行排列,日过相同,则值按照第三列降序排列。
sort -t':' -k 1.2,1.2 -k 3.3nr product  uniq
  说明:这个命令读取输入文件,并比较相邻的行,在正常情况下第二个及以后的重复行都将内删去。
  -c:显示输出中,在每行行加上文本中出现的次数。取代-u,-d选项。
  -d:值显示重复行
  -u:只显示文件中不重复的行
sort ptr | uniq -u   #显示不重复的行  
sort ptr | uniq -d   #显示重复行
  
sort ptr | uniq -c   #计数出现的次数
DSC00016.png




运维网声明 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-557287-1-1.html 上篇帖子: 匹配url_shell脚本 下篇帖子: mysql下的慢查询堵塞处理shell脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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