grep 文本过滤工具
  • 基本正则表达式

    • grep 语法
    • 基本正则表达式的元字符
    • 次数匹配
    • 位置锚定
    • 分组
  • 扩展正则表达式
    • 基本正则表达式的元字符
    • 次数匹配
    • 位置锚定
    • 分组
    • 或者
  1. grep的介绍
  2. linux上文本处理三剑客 grep:文本过滤(模式:pattern)作用: 把匹配到的行给予显示,没匹配到的行过滤掉。

模式:由正则表达式字符及文本字符所编写的过滤条件:

REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符不表示字符字面意义,而表示控制或匹配的功能:

分两类:

基本正则表达式:BRE

扩展正则表达式:ERE

grep -E,egrep (用来支持扩展正则表达式)

正则表达式引擎:

grep [OPTIONS] PATTERN [FILE...]

grep语法选项:

参数 作用
--color=auto 对匹配到的文本着色显示
-v 显示能被正则匹配到的行
-E 使用扩展正则表达式
-o 仅显示匹配到的内容
-q 不显示执行结果(静默模式)
-A n 显示匹配到的内容和指定的后面n行。
-B n 显示匹配到的内容和指定的前面n行。
-C n 显示匹配到的内容和指定的前后面n行。
-G n 使用基本正则表达式
-f 使用固定字符串
-p 使用perl的正则表达式

基本正则表达式元字符 字符匹配

参数 作用
. 匹配任意单个字符
[] 匹配任意范围内单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 任意字母和数字
[:alpha:] 任意大小写字母
[:lower:] 任意小写字母
[:upper:] 任意大写字母
[:blank:] 空白字符[空格和制表符]
[:space:] 水平和垂直的空白字符比blank更广
[:digit:] 任意十进制数字

[:digit:]|任意十六进制数字 [:punct:] |标点符号 [alex] | 匹配a,l,e,x这个四个字母

次数匹配

  1. *:任意长度的任意字符:
  2. 例:grep 'a.*y' grep.txt
  3. \?:匹配其前面的字符01次:即前面的可有可无:
  4. 例:grep 'x\?y' grep.txt
  5. \+:匹配其前面的字符至少一次:
  6. 例:grep 'x\+y' grep.txt
  7. 例:grep "xy\+" grep.txt
  8. \{m\}:匹配前面的字符m
  9. 例:grep '[[:alpha:]]'\[3\]t' /etc/passwd
  10. \{m,n\}:匹配前面的字符至少m次,至多n次。
  11. 例:grep '[:alpha:]' \[1,3]\ /etc/passwd
  12. \{0,n\}:匹配前面的字符至多n次:
  13. |{m,\}:匹配前面的字符至少m次。

位置锚定

  1. ^:行首锚定:用于模式的最左侧
  2. $:行尾锚定:用于模式的最右侧
  3. ^PATTERN$:用于模式匹配整行:
  4. ^$:空行:
  5. ^[[:space:]]*$ 空格行
  6. \< \b 词首锚定:用于单词模式的左侧
  7. 例:grep '\<[[:alpha:]]\[1,3\]t' /etc/passwd
  8. \> \b 词尾锚定:用于单词模式的右侧
  9. 例:grep '[[:alpha:]]\[1,3\]t\>' /etc/passwd
  10. \<pattern>:匹配整个单词。

分组

  1. 分组:\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(root\)\+
  2. 例:grep '\([[:alpha:]]\{1,3}t\>\).*\1' /etc/passwd
  3. Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1\2\3,...
  4. \1表示从左侧器第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
  5. 示例: \(string1\+\(string2\))
  6. \1: string1\+\(string2)*
  7. \2:string2
  8. 例:grep "\(r..t).*\1" /etc/passwd # 表示前面r..t匹配到什么内容,\1页必须匹配相对应的字符。
  9. 例:useradd ruut -c buuh -s /bin/bu
  10. grep "\(r..t\).*(b..h\).*\1.*\2" /etc/passwd
  11. 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
  1. egrep = grep -E
  2. egrep [OPTIONS][ATTERN [FILE...]
  3. 扩展正则表达式的元字符:
  4. 字符匹配:
  5. . 任意单个字符
  6. [] 指定范围的字符
  7. [^] 不在指定范围的字符
  8. 次数匹配
  9. *: 匹配前面字符任意次
  10. ?: 01
  11. +: 1次或多次
  12. {m}: 匹配m
  13. {m,n}; 至少m,至多n
  14. 位置锚定:
  15. ^: 行首
  16. $ 行尾
  17. \<\b 语首
  18. \>\b 语尾
  19. 分组:
  20. ()
  21. 后向引用:\1\2,..
  22. 或者
  23. a|b ab
  24. C|cat: Ccat
  25. (C|c)at Catcat

正则题目:

1、显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式)

  1. egrep '^[sS]' /proc/meminfo
  2. egrep -i ^'s' /proc/meminfo

2、显示/etc/passwd文件中不以/bin/bash结尾的行:

  1. egrep -v "/bin/bash"$ /etc/passwd

3、显示用户rpc默认的shell程序

  1. egrep '^rpc\>' /etc/passwd |cut -d: -f7

4、找出/etc/passwd中的两位或三位数

  1. egrep "[[:digit:]]{2,3}" /etc/passwd

5、显示centos7的/etc/grub2.cfg文件中,至少以一个空白字符开头的且后面存非空白字符的行

  1. egrep "^[[:space:]]+[^[:space:]]+" /etc/grubu.cfg

6、找出“netstat -tan” 命令的结果中以'LISTEN'后跟任意多个空白字符结尾的行

  1. netstat -tan | egrep "LISTEN[[:space:]]*$"

7、显示centos7上所有系统用户的用户名和UID

  1. cut -d: -f1,3 /etc/passwd | egrep "[1-9]{1,3}$"

8、找出/etc/passwd用户名同shell名的行

  1. egrep "^(.*):.*\1$" /etc/passwd

9、利用df和egrep,取出磁盘各分区利用率,并从大到小排序

  1. df -h | egrep -o "[[:digit:]]{1,2}%" | cut -d% -f1 |sort -r

10、显示三个用户root、alex、wang的UID和默认shell

  1. egrep "^(root|alex|wang)\>" /etc/passwd | cut -d: -f3,7

11、找出/etc/rc.d/init.d/functions文件中行首为某单词(包括下划线)后面跟一个小括号的行

  1. egrep -o ^"[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions

12、使用egrep取出/etc/rc.d/init.d/functions中其基名。

  1. echo "/etc/rc.d/init.d/functions/" | egrep -o "[^/]+/?$" | cut -d"/" -f1

13、使用egrep取出上面的路径的目录名。

  1. echo "/etc/rc.d/init.d//functions" | egrep -o "^/.*[^ ]" | egrep -o "^.*/.*/?"

14、统计last命令中以root登录的每个主机IP地址登录次数

  1. last | egrep -o "^root\>.*[0-9]\.[0-9]{1,3}" |tr -s " " "%"|cut -d% -f3

15、利用扩展正则表达式分别表示0-9 、10-99 、100-199、200-249 、250-255

  1. 看不懂要求

16、显示ifconfig 命令结果中所有IPv4 地址

  1. ifconfig | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"
  2. #未去除172 255之类IP

17、将此字符串:welcome to oldboy python 中的每个字符去重并排序,重复次数多的排到前面

  1. echo "welcome to oldboy python" | egrep -o "[[:alpha:]]" | sort | uniq -c | sort -nr

正则和grep——再做正则就去死的更多相关文章

  1. centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符 通配符 特殊符号. * + ? 总结 问加星 cat -n nl 输出文件内容并加上行号 alias放~/.bash_profile 2015-4-10 第十三节课

    centos 正则,grep,egrep,流式编辑器 sed,awk -F 多个分隔符  通配符 特殊符号. * + ? 总结  问加星 cat -n  nl  输出文件内容并加上行号 alias放~ ...

  2. FPGA做正则匹配和网络安全,究竟有多大的优势?

    FPGA做正则匹配和网络安全,究竟有多大的优势? 西电通院专用集成电路课程学习 云导播 网络安全已经被提升为国家战略的高度,高校里面的新增的一级学科,去年9月份,中央网信办.教育部公布了“一流网络安全 ...

  3. el-popover 的显示或隐藏,要在拿到真实dom之后再做控制

    el-popover 的显示或隐藏,要在拿到真实dom之后再做控制

  4. grep命令做永久别名 显示颜色

    grep命令做永久别名  显示颜色 http://jingyan.baidu.com/article/22fe7ced17c1543002617f9c.htmlhttp://blog.csdn.net ...

  5. 【java】【多线程】等待开启的多个线程都执行完成,再做事情,怎么实现

    今天在controller中写一个接口用来测试模拟多个请求同时到达 下订单的情况, 怎么能有效保证高并发下的库存和销量的一致性呢?[具体实现方法:https://www.cnblogs.com/sxd ...

  6. Spark在处理数据的时候,会将数据都加载到内存再做处理吗?

    对于Spark的初学者,往往会有一个疑问:Spark(如SparkRDD.SparkSQL)在处理数据的时候,会将数据都加载到内存再做处理吗? 很显然,答案是否定的! 对该问题产生疑问的根源还是对Sp ...

  7. 正则、grep、sed、awk

    每次用到正则都要蛋疼一下,索性总结一下在这里. 正则 正則表達式主要分为基础正则和扩展正则.注意,正则和一般命令行输入的命令的通配符不同.正则仅仅使用于支持这样的表示法的工具,如:vi,grep,se ...

  8. shell脚本-正则、grep、sed、awk

    ----------------------------------------正则---------------------------------------- 基础正则 ^word ##搜索以w ...

  9. [svc]linux正则及grep常用手法

    正则测试 可以用sublime等工具快速的检测正则是否合适 china : 匹配此行中任意位置有china字符的行 ^china : 匹配此以china开关的行 china$ : 匹配以china结尾 ...

随机推荐

  1. 读Zepto源码之Touch模块

    大家都知道,因为历史原因,移动端上的点击事件会有 300ms 左右的延迟,Zepto 的 touch 模块解决的就是移动端点击延迟的问题,同时也提供了滑动的 swipe 事件. 读 Zepto 源码系 ...

  2. vim格式化代码

    在命令模式下,按键盘gg=G 命令含义: gg:到达文件头=:缩进G:直到文件尾

  3. Download the Hibernate Tools

    首先去官网上下载最新版本的Hibernate Tools JBoss Tools 4.5.0.Final Requirements: Java 8 and Eclipse Oxygen 4.7 有 4 ...

  4. nmcli命令大集合

    nmcli命令 地址配置工具:nmcli nmcli  device  查看所有网卡的信息 nmcli  device  status 和numcli device 相同 nmcli  device ...

  5. win7系统Myeclipse下切换SVN用户

     Eclipse的SVN插件Subclipse做得很好,在svn操作方面提供了很强大丰富的功能.但到目前为止,该插件对svn用户的概念极为淡薄,不但不能方便地切换用户,而且一旦用户的帐号.密码保存之后 ...

  6. epoll的ET和LT两种模式对比及注意事项

    ET模式: 因为ET模式只有从unavailable到available才会触发,所以 1.读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小: 如果应用层读 ...

  7. JAVA 局部变量表

    1. 除了 long,double 占用两个slot 之外,其他类型均占用一个slot. 2.在内容相同的情况下, 实例方法(不加 static) 会比 类方法 (static)对占用一个局部变量位置 ...

  8. TEXT宏

    TEXT宏是windows程序设计中经常遇到的宏,定义在 <winnt.h>中 TCHAR *P = TEXT("this is a const string"); 如 ...

  9. C++ Primer Plus 6 第一章

    一.机器语言.汇编语言.C\C++.高级语言 机器语言:机器真正识别,能在机器上运行的语言. 汇编语言:低级语言,直接操作硬件,如直接访问cpu寄存器和内存单元.不具有移植性.因为不同的平台对应的硬件 ...

  10. JavaScript高级(01)

    前端开发工具 1.1. WebStorm介绍和下载 l  介绍 WebStorm是JetBrains 推出的一款强大的HTML5编辑工具,拥有丰富的代码快速编辑,可以智能的补全代码.代码格式化.htm ...