正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享下:

1基础正则表达式
grep 工具,以前介绍过。
grep -[acinv]
'搜索内容串' filename
-a 以文本文件方式搜索
-c 计算找到的符合行的次数
-i 忽略大小写
-n 顺便输出行号

-v 反向选择,即找 没有搜索字符串的行
其中搜索串可以是正则表达式!

1
搜索有the的行,并输出行号

$grep -n 'the' regular_express.txt
搜 索没有the的行,并输出行号
$grep -nv 'the'
regular_express.txt

2 利 用[]搜索集合字符
[] 表示其中的某一个字符 ,例如[ade] 表示a或d或e

woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt
8:I can't
finish the test.
9:Oh! the soup taste good!

可以用^符号做[]内的前缀,表示除[]内的字符之外的字 符。
比如搜索oo前没有g的字符串所在的行. 使用 '[^g]oo'
作搜索字符串
woody@xiaoc:~/tmp$ grep -n '[^g]oo' regular_express.txt
2:apple
is my favorite food.
3:Football game is not use feet only.
18:google is
the best tools for search keyword.
19:goooooogle yes!

[]
内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z] 则是大写字母们。[a-zA-Z0-9]表示所有数字与英文字符。
当然也可以配合^来排除字符。
搜索包含数字的行
woody@xiaoc:~/tmp$ grep -n '[0-9]'
regular_express.txt
5:However ,this dress is about $ 3183 dollars.

15:You are the best is menu you are the no.1.

行首与行尾字符 ^ $. ^
表示行的开头,$表示行的结尾( 不是字符,是位置)那么‘^$' 就表示空行,因为只有
行首和行尾。

这里^与[]里面使用的^意义不同。它表示^后面的串是在行的开头。
比如搜索the在开头的行
woody@xiaoc:~/tmp$
grep -n '^the' regular_express.txt
12:the symbol '*' is represented as star.

搜索以小写字母开头的行
woody@xiaoc:~/tmp$ grep -n '^[a-z]' regular_express.txt

2:apple is my favorite food.
4:this dress doesn't fit me.

10:motorcycle is cheap than car.
12:the symbol '*' is represented as
star.
18:google is the best tools for search keyword.
19:goooooogle yes!

20:go! go! Let's go.
woody@xiaoc:~/tmp$

搜索开头不是英文字母的行

woody@xiaoc:~/tmp$ grep -n '^[^a-zA-Z]' regular_express.txt
1:"Open
Source" is a good mechanism to develop programs.
21:#I am VBird

woody@xiaoc:~/tmp$

$表示它前面的串是在行的结尾,比如 '\.' 表示 . 在一行的结尾
搜索末尾是.的行

woody@xiaoc:~/tmp$ grep -n '\.$' regular_express.txt //. 是正则表达式的特殊符号,所以要用\转义

1:"Open Source" is a good mechanism to develop programs.
2:apple is my
favorite food.
3:Football game is not use feet only.
4:this dress
doesn't fit me.
5:However ,this dress is about $ 3183 dollars.
6:GNU is
free air not free beer.
.....

注意在MS的系统下生成的文本文件,换行会加上一个 ^M
字符。所以最后的字符会是隐藏的^M ,在处理Windows
下面的文本时要特别注意!
可以用cat dos_file | tr -d '\r'
> unix_file 来删除^M符号。 ^M==\r

那么'^$' 就表示只有行首行尾的空行拉!
搜索空行

woody@xiaoc:~/tmp$ grep -n '^$' regular_express.txt
22:
23:

woody@xiaoc:~/tmp$

搜索非空行
woody@xiaoc:~/tmp$ grep -vn '^$'
regular_express.txt
1:"Open Source" is a good mechanism to develop programs.

2:apple is my favorite food.
3:Football game is not use feet only.

4:this dress doesn't fit me.
..........

任意一个字符. 与重复字符 *

在bash中*代表通配符,用来代表任意个 字符,但是在正则表达式中,他含义不同,*表示有0个或多个 某个字符。
例如 oo*,
表示第一个o一定存在,第二个o可以有一个或多个,也可以没有,因此代表至少一个o.

点. 代表一个任意字符,必须存在。 g??d 可以用
'g..d' 表示。 good ,gxxd ,gabd .....都符合。

woody@xiaoc:~/tmp$ grep -n 'g..d'
regular_express.txt
1:"Open Source" is a good mechanism to develop programs.

9:Oh! the soup taste good!
16:The world is the same with 'glad'.

woody@xiaoc:~/tmp$

搜索两个o以上的字符串
woody@xiaoc:~/tmp$ grep -n 'ooo*'
regular_express.txt //前两个o一定存在,第三个o可没有,也可有多个。
1:"Open Source" is a good
mechanism to develop programs.
2:apple is my favorite food.
3:Football
game is not use feet only.
9:Oh! the soup taste good!
18:google is the
best tools for search keyword.
19:goooooogle yes!

搜索g开头和结尾,中间是至少一个o的字符串,即gog, goog....gooog...等
woody@xiaoc:~/tmp$
grep -n 'goo*g' regular_express.txt
18:google is the best tools for search
keyword.
19:goooooogle yes!

搜索g开头和结尾的字符串在的行
woody@xiaoc:~/tmp$
grep -n 'g.*g' regular_express.txt // .*表示 0个或多个任意字符
1:"Open Source" is a
good mechanism to develop programs.
14:The gd software is a library for
drafting programs.
18:google is the best tools for search keyword.

19:goooooogle yes!
20:go! go! Let's go.

限定连续重复字符的范围 { }

. * 只能限制0个或多个, 如果要确切的限制字符重复数量,就用{范围} 。范围是数字用,隔开 2,5 表示2~5个,
2表示2个,2,
表示2到更多个
注意,由于{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用\转义一下。

搜索包含两个o的字符串的行。

woody@xiaoc:~/tmp$ grep -n 'o\{2\}' regular_express.txt
1:"Open Source"
is a good mechanism to develop programs.
2:apple is my favorite food.

3:Football game is not use feet only.
9:Oh! the soup taste good!

18:google is the best tools for search keyword.
19:goooooogle yes!

搜索g后面跟2~5个o,后面再跟一个g的字符串的行。
woody@xiaoc:~/tmp$ grep -n 'go\{2,5\}g'
regular_express.txt
18:google is the best tools for search keyword.

搜索包含g后面跟2个以上o,后面再跟g的行。。
woody@xiaoc:~/tmp$ grep -n 'go\{2,\}g'
regular_express.txt
18:google is the best tools for search keyword.

19:goooooogle yes!

注意,相让[]中的^ - 不表现特殊意义,可以放在[]里面内容的后面。

'[^a-z\.!^ -]' 表示没有小写字母,没有. 没有!, 没有空格,没有- 的 串,注意[]里面有个小空格。

另外shell
里面的反向选择为[!range], 正则里面是 [^range]

2扩展正则表达式

扩展正则表达式是对基础正则表达式添加了几个特殊构成的。
它令某些操作更加方便。
比如我们要去除 空白行和行首为 #的行,
会这样用:
woody@xiaoc:~/tmp$ grep -v '^$' regular_express.txt | grep -v '^#'

"Open Source" is a good mechanism to develop programs.
apple is my
favorite food.
Football game is not use feet only.
this dress doesn't
fit me.
............

然而使用支持扩展正则表达式的 egrep 与扩展特殊符号 | ,会方便许多。

注意grep只支持基础表达式, 而egrep 支持扩展的, 其实 egrep 是 grep -E 的别名而已。因此grep -E 支持扩展正则。

那么:
woody@xiaoc:~/tmp$ egrep -v '^$|^#' regular_express.txt
"Open
Source" is a good mechanism to develop programs.
apple is my favorite food.

Football game is not use feet only.
this dress doesn't fit me.

....................
这里| 表示或的关系。 即满足 ^$ 或者 ^# 的字符串。

这里列出几个扩展特殊符号:
+, 于 . * 作用类似,表示 一个或多个重复字符。
?, 于 . *
作用类似,表示0个或一个字符。
|,表示或关系,比如 'gd|good|dog' 表示有gd,good或dog的串

(),将部分内容合成一个单元组。 比如 要搜索 glad 或 good 可以这样 'g(la|oo)d'
()的好处是可以对小组使用 + ? *
等。
比如要搜索A和C开头结尾,中间有至少一个(xyz) 的串,可以这样 : 'A(xyz)+C'

grep用法的更多相关文章

  1. grep用法详解:grep与正则表达式【转】

    转自:http://blog.csdn.net/hellochenlian/article/details/34088179 grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配 ...

  2. linux命令之grep用法介绍

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

  3. grep用法【转】

    简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它 ...

  4. linux中grep用法(“或”、“与”)

    1.普通用法 grep keyword 若果keyword中有空格 grep "keyword" 例如: ls | grep mp4 2.“与”操作(其实就是多次筛选) grep ...

  5. grep用法小结

    用法 grep [OPTIONS] PATTERN [FILE...] grep [OPTIONS] -e PATTERN ... [FILE...] grep [OPTIONS] -f FILE . ...

  6. linux中find与三剑客之grep用法

    find用法 find一般用来用来查找文件名称 根据文件的名称或者属性查找文件. 语法格式: find [查找范围] [参数] 参数: -name : 按照文件的名字查找文件 * :通配符 -inam ...

  7. Linux grep用法整理

    grep -i 忽略大小写 grep --color grep -v 反向查找 grep -o 只显示被模式匹配到的字符串

  8. linux之grep用法

    运用场景:在当前目录下查找,比如代码目录,不需要在.svn目录下,以及ctags生成的tags文件中查找: grep的--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录: ...

  9. linux学习:xargs与grep用法整理

    xargs xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具. xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据. xargs 也可 ...

随机推荐

  1. oracle sql生成临时递增数据

    1.生成1至10记录 select rownum from dual connect 结果: 12345678910 2.生成最近12个月记录 ), 'yyyyMM') time from dual ...

  2. vue filters中使用data中数据

    vue filters中 this指向的不是vue实例,但想要获取vue实例中data中的数据,可以采用下面方法.在 beforeCreate中将vue实例赋值给全局变量app0,然后filters中 ...

  3. week1总结

    week1总结 1. 开发上线工具流程以及规范类 规范: css注释:/* Comment Text*/ Css嵌套选择器:请不要让嵌套选择器的深度超过 3 层! 再说一遍: 永远不要嵌套 ID 选择 ...

  4. MapReduce实现PageRank算法(邻接矩阵法)

    前言 之前写过稀疏图的实现方法,这次写用矩阵存储数据的算法实现,只要会矩阵相乘的话,实现这个就很简单了.如果有不懂的可以先看一下下面两篇随笔. MapReduce实现PageRank算法(稀疏图法) ...

  5. 记录近期面试题,面试总结 (从css - vue 全面面试题)

    记录近期换工作时遇到的面试题和面试题答案 css 部分 盒模型 问题:说一下 css 的盒模型 盒模型分为标准模型和怪异盒模型(IE 盒模型) 标准盒模型:盒模型的宽高只是内容(content)的宽高 ...

  6. 从svn到git开发转变

    前言:目前的公司的开发技术还是处于刀耕火种的年代,react,vue已经火到不行了,可是还在用jQuery一遍遍处理着dom.版本控制用的是svn,这里也不是说svn不好,在windows下svn的“ ...

  7. CPU高的排查

    之前有朋友反馈说发的内容希望有个梯度,逐步加深,前面发了几篇关于jvm源码分析的文章,可能我觉得我已经把内容写得浅显易懂了,但是对于某些没怎么接触的同学来说还是比较难理解,这个我以后慢慢改进吧,今天发 ...

  8. Xilinx Vivado的使用详细介绍(4):Zedboard+vivado之流水灯(加SDK)

    Vivado+zedboard之初学流水灯 Author:zhangxianhe 环境:vivado 2016.3(已验证适用于2015.4) 开发板:Zedboard version xc7z020 ...

  9. Kotlin 扩展

    Kotlin 可以对一个类的属性和方法进行扩展,且不需要继承或使用 Decorator 模式. 扩展是一种静态行为,对被扩展的类代码本身不会造成任何影响. 扩展函数 扩展函数可以在已有类中添加新的方法 ...

  10. MongoDB数据查询 --MongoDB

    1.插入测试数据 use flower db.goods.insert({'goods_name':'Hyacinth',price:10,num:800}) db.goods.insert({goo ...