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. 06jQuery-04-DOM操作

    jQuery既然是为了帮助你能从js的繁琐中解脱出来,自然在DOM操作上也有自己的一套. 1.修改Text和HTML 之前我们提到过,如果用JS的话,你要修改Text或者HTML需要用到其innerH ...

  2. gephi安装后无法打开

    具体解决的方法是找到gephi.conf文件(在“gephi安装目录\etc”中)文件,添加下面的一行,指定jdkhome的路径. jdkhome="C:\Program Files (x8 ...

  3. ssl协议以及生成

    一.https协议https是一安全为目标的httpt通道,简单讲师http的安全版.即http下加入ssl层,https的安全基础是ssl,因此加密的详细内容就需要ssl.http和https的区别 ...

  4. 你的专属定制——JQuery自定义插件

        前  言 絮叨絮叨 jQuery是一个快速.简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架).jQuery设计的宗 ...

  5. day18<集合框架+>

    集合框架(Map集合概述和特点) 集合框架(Map集合的功能概述) 集合框架(Map集合的遍历之键找值) 集合框架(Map集合的遍历之键值对对象找键和值) 集合框架(Map集合的遍历之键值对对象找键和 ...

  6. 11 Linear Models for Classification

    一.二元分类的线性模型 线性分类.线性回归.逻辑回归 可视化这三个线性模型的代价函数 SQR.SCE的值都是大于等于0/1的 理论分析上界 将回归应用于分类 线性回归后的参数值常用于pla/pa/lo ...

  7. 详解AngularJS中的依赖注入

    点击查看AngularJS系列目录 依赖注入 一般来说,一个对象只能通过三种方法来得到它的依赖项目: 我们可以在对象内部创建依赖项目 我们可以将依赖作为一个全局变量来进行查找或引用 我们可以将依赖传递 ...

  8. Muddy Fields

     Muddy Fields Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submi ...

  9. E. Exposition

                                                                        E. Exposition time limit per tes ...

  10. Docker镜像加速

    安装好Docker后接下来就是愉快的玩耍了,可是实际情况并不愉快 因为docker的默认镜像源在国外,鉴于国内特殊的网络原因访问起来往往很慢或者完全访问不了,幸好国内有类似的镜像源可以使用,我使用的是 ...