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这个四个字母

次数匹配

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

位置锚定

^:行首锚定:用于模式的最左侧

$:行尾锚定:用于模式的最右侧

^PATTERN$:用于模式匹配整行:

^$:空行:

^[[:space:]]*$  空格行

\< 或 \b 词首锚定:用于单词模式的左侧
例:grep '\<[[:alpha:]]\[1,3\]t' /etc/passwd \> 或 \b 词尾锚定:用于单词模式的右侧
例:grep '[[:alpha:]]\[1,3\]t\>' /etc/passwd \<pattern>:匹配整个单词。

分组

分组:\(\)将一个或多个字符捆绑在一起,当做一个整体进行处理,如:\(root\)\+

例:grep '\([[:alpha:]]\{1,3}t\>\).*\1' /etc/passwd

Note:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3,...

\1表示从左侧器第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

示例:   \(string1\+\(string2\))
\1: string1\+\(string2)*
\2:string2 例:grep "\(r..t).*\1" /etc/passwd # 表示前面r..t匹配到什么内容,\1页必须匹配相对应的字符。 例:useradd ruut -c buuh -s /bin/bu
grep "\(r..t\).*(b..h\).*\1.*\2" /etc/passwd 后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
egrep = grep -E

egrep [OPTIONS][ATTERN [FILE...]

扩展正则表达式的元字符:
字符匹配:
. 任意单个字符
[] 指定范围的字符
[^] 不在指定范围的字符 次数匹配 ;
*: 匹配前面字符任意次
?: 0或1次
+: 1次或多次
{m}: 匹配m次
{m,n}; 至少m,至多n次 位置锚定:
^: 行首
$: 行尾
\<,\b: 语首
\>,\b: 语尾 分组:
()
后向引用:\1,\2,.. 或者
a|b: a或b
C|cat: C或cat
(C|c)at :Cat或cat

正则题目:

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

egrep '^[sS]' /proc/meminfo

egrep -i ^'s' /proc/meminfo

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

看不懂要求

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

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

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

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. MyBatis框架(一)

    MyBatis介绍: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为 ...

  2. cas-单点登录-应用说明

    单独在tomcat中启动cas 1,  我的百度网盘中有 cas  和 tomcat-cas 压缩包  http://pan.baidu.com/s/1bnxVRkF   直接解压缩就可以使用. 2, ...

  3. JavaScript自动化构建工具入门----grunt、gulp、webpack

    蛮荒时代的程序员: 做项目的时候,会有大量的js 大量的css   需要合并压缩,大量时间需要用到合并压缩 在前端开发中会出现很多重复性无意义的劳动  自动化时代的程序员: 希望一切都可以自动完成  ...

  4. global,local,static的区别

    1.在函数内部使用global关键字定义的变量可以成为全局变量,如果该变量已经被定义了,那么他的值就是原来的值,否则就是一个新的全局变量(一句话:已存在就不再创建): <?php $a=1; f ...

  5. angular学习笔记02 angular指令大全

    第一步 先要引入angular, 第二步  在 html 标签中<html  ng-app>  加入ng-app(这是个必须的,不然会报错) 接下来就可以去使用angular的各种指令了. ...

  6. oracle pl/sql 函数

    函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句.而在函数体内必须包含return语句返回的数据.我们可以使用create function来建立函数. 1).接下来通过一个案 ...

  7. PLT文件 和 DXF文件

    PLT: CAM/CAD类似软件处理的图像文件的文件格式 DXF: AutoCAD(Drawing Interchange Format或者Drawing Exchange Format) 绘图交换文 ...

  8. JSP 入门

    request是请求,即客服端发来的请求. response是响应,是服务器做出的响应 redirect页面重定向 forward页面跳转 不改变url 四个作用域 如果把变量放到pageContex ...

  9. Distribute Candies

    Given an integer array with even length, where different numbers in this array represent different k ...

  10. 初入APP(结合mui框架进行页面搭建)

      前  言 博主最近在接触移动APP,学习了几个小技巧,和大家分享一下. 1. 状态栏设置 现在打开绝大多数APP,状态栏都是与APP一体,不仅美观,而且与整体协调.博主是个中度强迫症患者,顶部那个 ...