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. Spring第五篇【cglib、手动实现AOP编程】

    前言 到目前为止,已经简单学习了Spring的Core模块.也会怎么与Struts2框架进行整合了-.于是我们就开启了Spring的AOP模块了-在讲解AOP模块之前,首先我们来讲解一下cglib代理 ...

  2. 我和Python

    记不得是年,我在网易云课堂上乱逛,看到了哈佛大学的<计算机编程导论>,这门课讲的正好是Python,讲的啥内容已经记不得多少了,因为是全英文教学,我只能慢慢的看字幕,一集得看个好几遍. 我 ...

  3. 出现java.sql.SQLException: No suitable driver的几种解决办法

    今天在用C3p0连接MySql数据库 这个时候出现了上面的错误, 一般来说这种错误有3个方向解决 一般都是db的配置的问题 ,一定要小心DB 的配置 八月 19, 2017 8:30:46 下午 co ...

  4. 解决在Ubuntu终端下使用cURL获取GBK格式的页面出现乱码问题

    问题描述 在Ubuntu下使用终端使用cURL去拿一个GBK的页面,发现返回来的内容里面中文都是乱码 解决方法 通过iconv来处理乱码拿到的内容,进行转码,示例如下: $curl http://ww ...

  5. Jquery Ajax type的4种类型

    Ajax type这个里面填什么呢?通常大家都会说get和post.那么还有2个是什么呢 $.ajax({ url: 'http://www.cnblogs.com/youku/', type: '' ...

  6. 浅析Spring MVC工作机制

    1.如何使用Spring MVC? 在web.xml中配置一个DispatcherServlet DispatchServlet初始化的时候会去寻找一个在应用程序的WEB-INF目录下的配置文件,命名 ...

  7. Go语言下载、安装、配置、使用

    Go语言 Go语言(Golang,The Go Programming Language),是谷歌2009发布的第二款开源编程语言.2009年7月份,谷歌曾发布了Simple语言,它是用来开发Andr ...

  8. 零复制(zero copy)技术

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  9. 自测-4 Have Fun with Numbers

    Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, wit ...

  10. CN_Week1_Receptive_Field

    0. The introduction: 1. An example: Models of "Receptive Fields". 2. An intuitive method o ...