shell三剑客之grep

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);

2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

正则表达式的特点是:

1. 灵活性、逻辑性和功能性非常的强;

2. 可以迅速地用极简单的方式达到字符串的复杂控制。

3. 对于刚接触的人来说,比较晦涩难懂。

由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。

这里将会讲到shell里边的sed、awk、find、grep四剑客中的grep

–color=auto: 对匹配到的文本着色显示;  

-v: 显示不能够被pattern匹配到的行; 

-i: 忽略字符大小写 

-n:显示匹配的行号  

-c: 统计匹配的行数  

-o: 仅显示匹配到的字符串;  

-q: 静默模式,不输出任何信息  

-A #: after, 后#行  

-B #: before, 前#行  

-C #:context, 前后各#行  

-e:实现多个选项间的逻辑or关系 grep –e ‘cat ’  -e ‘dog’  file  

-w:整行匹配整个单词  

-E:使用ERE

正则表达式元字符

字符匹配: 

.   : 匹配任意单个字符; 

[]  : 匹配指定范围内的任意单个字符 

[^] :匹配指定范围外的任意单个字符

[:alpha:] 所有字母,包括大、小写 

[:alnum:] 所有字母和数字 

[:upper:] 所有大写字母 

[:lower:] 所有小写字母 

[:digit:] 所有数字 

[:punct:] 所有标点符号 

[:space:] 空格和Tab

正则表达式

*:匹配前面的字符任意次,包括0次 贪婪模式:尽可能长的匹配 

.*:任意长度的任意字符 

\?:匹配其前面的字符0或1次 

\+:匹配其前面的字符至少1次 

\{n\}:匹配前面的字符n次 

\{m,n\}:匹配前面的字符至少m次,至多n次 

\{,n\}:匹配前面的字符至多n次 

\{n,\}:匹配前面的字符至少n次

位置锚定:定位出现的位置 

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

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

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

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

\< 或 \b:词首锚定,用于单词模式的左侧 

\> 或 \b:词尾锚定;用于单词模式的右侧 

\<PATTERN\>:匹配整个单词 

首先创建一个文本,内容如下;

[root@centous1 home]# cat 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.
 However, this dress is about $ 3183 dollars.
 GNU is free air not free beer.
 Her hair is very beauty.
 I can't finish the test.
 Oh! The soup taste good.
 motorcycle is cheap than car.
 This window is clear.


 the symbol '*' is represented as start.
 Oh!My god!
 The gd software is a library for drafting programs.
 You are the best is mean you are the no. 1.
 The world <Happy> is the same with "glad".
 I like dog.
 google is the best tools for search keyword.
 goooooogle yes!
 go! go! Let's go.
 # I am VBird

1.搜寻特定字符串"the"

 注: n为显示行号

grep -n 'the' regular_express.txt

 

2.反向搜寻特定字符串"the"

 grep -vn 'the' regular_express.txt

 

3.取得任意大小写"the"的这个字符串

grep -in 'the' regular_express.txt

 

4.利用括号 [] 来搜寻集合字符

搜索test或taste这两个单词时,发现他们有共同的't?st',所以可以这么搜寻

grep -n 't[ae]st' regular_express.txt

这样其实就是在找t[a]st和t[e]st这两个分开的字符

如果搜索有 oo 的字符时,则可以使用:

grep -n 'oo' regular_express.txt

如果搜索oo时不想搜到 oo 前面有 g 的话,我们可以利用反向选择[^]来达成:

grep -n '[^g]oo'  regular_express.txt

如果搜索oo前面不想有小写字符,则:

grep -n '[^a-z]oo' regular_express.txt

 注: 大写英文/小写英文/数字 可以使用 [a-z]/[A-Z]/[0-9]等方式来书写,也可以写在一起

 [a-zA-Z0-9]表示要求字符串是数字以及英文

 如果我们要取得有数字的那行,则:

 grep -n '[0-9]' regular_express.txt

注:但考虑到语系对编码顺序的影响,因此除了连续编码使用减号[-]外,也可以用[:lower:]代替a-z 以及 [:digit:] 代替0-9 使用

grep -n '[^[:lower:]]oo' regular_express.txt

grep -n '[[:digit:]]' regular_express.txt

 

5.显示行首为'the'的字符串

grep -n '^the' regular_express.txt

显示行首是小写字符

grep -n '^[a-z]' regular_express.txt

 

6.显示行尾为点 . 的那一行

grep -n '\.$' regular_express.txt

 

7.显示5-9行数据

cat -An regular_express.txt |head -n 10 |tail -n 6

 

8.显示空白行

grep -n '^$' regular_express.txt

 

9.找出g??d字符串,起头g结束d的四个字符串

 grep -n 'g..d' regular_express.txt

 

10. o*代表空字符(就是有没有字符都可以)或者一个到N个o字符,所以grep -n 'o*' regular_express.txt就会把所有行全部打印出来,

 11.oo*代表o+空字符或者一个到N个o字符,所以grep -n 'oo*' regular_express.txt就会把o,oo,ooo等的行全部打印出来

 12."goo*g"代表gog,goog,gooog…等

 grep -n 'goo*g' regular_express.txt

 

 

13.找出含g…g字符串的行

注: .代表任意字符, .*则就代表空字符或者一个到N个任意字符

grep -n 'g.*g' regular_express.txt

 

14.找出含有数字的行

grep -n '[0-9][0-9]*' regular_express.txt

或grep -n '[0-9]' regular_express.txt

 

15.找出含两个o的字符串

 注:{}因为在shell里有特殊意义,所以需要加跳脱符\来让其失去意义

grep -n 'o\{2\}'  regular_express.txt

找出g后含2到5个o然后以g结尾的字符串

grep -n 'go\{2,5\}g'  regular_express.txt

找出g后含2以上的o然后以g结尾的字符串

grep -n 'go\{2,\}g'  regular_express.txt

原创文章,作者:forest,如若转载,请注明出处:http://www.178linux.com/30509

(0)
forestforest
上一篇 2016-08-08 16:07
下一篇 2016-08-08 16:07

相关推荐

  • 马哥教育网络班21期+第8周课程练习

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 集线器(HUB)是在OSI模型的第一层——物理层——连接多台主机、延长网络的设备。其主要功能是将从一个端口接收到的数据包转发给所有端口。中继器(Repeater)是将由电缆传过来的电信号或光信号调整波形和放大再传给另一个电缆的设备,提供多端口服务的中继器称作集线器。二者的主要区别是…

    Linux干货 2016-08-29
  • nginx+keepalived构建负载均衡代理服务器

    实验环境: 1、centos7.3 centos6.82、两台VS提供nginx代理和keepalived3、两台RS提供httpd服务并部署wordpress4、另外一台提供Mysql数据库服务 实验拓扑图: 拓扑图 实验步骤 1、在vs1(172.18.251.4)上配置,用yum安装keepalived和nginx yum install -y kee…

    Linux干货 2017-05-21
  • find使用详解

    文件查找是根据文件的各种属性去找到相对应的文件。 文件查找分为实时查找和非实时查找。     非实时查找是根据索引来进行查找;虽然非实时查找查询速度快,但在构建索引时相当占用资源,只有在系统空闲时才能进行,这样有可能会造成索引内容与当前系统中文件的状态不一致的情况,所以查找结果有可能会不准确。   …

    Linux干货 2015-03-18
  • 计算机组成及Linux入门知识

    计算机的基本组成: 存储器:     实现记忆功能的部件用来存放计算程序及参与运算的各种数据 运算器:     负责数据的算术运算和逻辑运算即数据的加工处理 控制器:     负责对程序规定的控制信息进行分析,控制并协调输入,输出操作或内存访问 输入设备:    实现计算程序和原始数据的输入 输出设备:    实现计算结果输出 组成的联系: 图一 图二 计算…

    Linux干货 2016-09-16
  • vim常用小结

    移动光标类命令h :光标左移一个字符l :光标右移一个字符space:光标右移一个字符Backspace:光标左移一个字符k或Ctrl+p:光标上移一行j或Ctrl+n :光标下移一行Enter :光标下移一行w或W :光标右移一个字至字首b或B :光标左移一个字至字首e或E :光标右移一个字至字尾) :光标移至句尾( :光标移至句首}:光标移至段落最后一个…

    Linux干货 2017-04-11
  • GRUB启动故障排除和内核编译

    如何进入光盘应急系统(以下修复操作仅适用于GRUB legacy, 不适用于GRUB2): 步骤一:给主机挂上安装光盘, 或者有相应启动镜像的硬盘分区(可移动的分区) 步骤二:开机时选择CDROM先启动 步骤三:进入光盘启动界面选择应急救援模式 步骤四: 不选择设置网络接口, 直接读取磁盘分区并以读写方式挂载 步骤五: 选择shell进入bash中对磁盘进行…

    Linux干货 2016-09-12