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. Java内部类的总结

    内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类分为: 成员内部类.局部内部类.静态嵌套类.匿名内部类 . 1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类 ...

  2. Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】

    前言 上篇Struts博文已经讲解了Struts的开发步骤以及执行流程了-..对Struts的配置文件有了了解-..本博文继续讲解Struts在配置的时候一些值得要学习的细节- Action开发的三种 ...

  3. Eclipse-远程调试服务器代码

    1, 将应用部署到服务器上可以正常启动 2, 在Eclipse中,有相同的项目(程序) 3, 项目右键(ops-web)-->Debug as --> Debug Configuratio ...

  4. [android游戏开发初学]SurfaceView初探之缓冲区测试

    先上测试代码 private static class PathView extends SurfaceView implements SurfaceHolder.Callback{ private ...

  5. 3.bootstrap-组件

    1.图标 <button type="button" class="btn btn-default"> <span class="g ...

  6. 使用node.js检查js语法错误

    如果没有一些工具和插件写JavaScript代码遇到语法错误找起来很费时间,请教了同事怎么用node.js检查 用浏览器测试的时候报语法错误. 1.点击红圈中的蓝色按钮,下次刷新是会在抛出异常的时候自 ...

  7. notepad的快捷操作-代码速写

    (一)先安装zencode插件 (二)运用插件 第一步:键入:html:xt 再Ctrl+Alt+Enter键 得到 <!DOCTYPE html PUBLIC "-//W3C//DT ...

  8. 怎样使用自定义标签简化 js、css 引入?

    国庆将至,工作兴致全无,来总结点项目里平时不起眼干货. 前端引入 js .css 一般是这样: <script type="text/javascript" src=&quo ...

  9. E. Fish (概率DP)

    E. Fish time limit per test 3 seconds memory limit per test 128 megabytes input standard input outpu ...

  10. python --- json模块和pickle模块详解

    json:JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式(用于数据序列化和反序列化).(适用于多种编程语言,可以与其他编程语言做数据交换 ...