grep的使用和正则表达式

       grep作为Linux中的文本编辑的三剑客之一,它的功能很强大,并不是虚传,学会了grep在文本中找我们要找的的字符串总是能很轻易地找到,grep不仅仅就这一点功能,它在我们工作上也会对我们有很大的帮助。下面我来介绍一下grep的简单的功能。

grep :文本过滤( 模式:pattern) 工具; (以行为单位的)

grep, egrep,[fgrep (不支持正则表达式 搜索) 搜索速度快]

grep: Global search REgular expression and Print outthe line.

作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行;

模式:由正则表达式字符及文本字符所编写的过滤条件

grep [OPTIONS] PATTERN [FILE…]

grep root /etc/passwd

grep "$USER" /etc/passwd

grep '$USER' /etc/passwd

grep `whoami` /etc/passwd

grep 命令选项

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

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

grep的使用和正则表达式

-i:  忽略字符大小写

grep的使用和正则表达式

-n: : 显示匹配的行号

grep的使用和正则表达式

-c:  统计匹配的行数

grep的使用和正则表达式

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

grep的使用和正则表达式

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

-A # :after,  后#行

-B #: before,  前#行

-C # :context,  前后各#行

-e :实现多个选项间的逻辑or (或)关系   -C # :conte

grep –e ‘cat ’ -e ‘dog’ file

grep的使用和正则表达式

-w :整行匹配整个单词

grep -w.PNG

-E :使用ERE

正则表达式引擎:

采用 不同 算法,检查处理正则表达式的软件模块

PCRE(Perl Compatible Regular Expressions)

元字符分类:字符匹配、匹配次数、位置锚定、分组

man 7 regex

程序支持:grep, vim, less,nginx等

分两类:

基本正则表达式:BRE

字符匹配:

. :  匹配任意单个字符;

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

[].PNG

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

[^].PNG

[:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:] 、[:punct:] 、[:space:]

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* :匹配前面的字符任意次,包括0次

贪婪模式:尽可能长的匹配

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

匹配任意单个字符.PNG

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

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

匹配前面的字符至少一次.PNG

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

匹配前面字符n次.PNG

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

匹配前面的字符至少m次,至多n次.PNG

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

匹配前面的字符至多n次.PNG

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

匹配前面的字符至少n次.PNG

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

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

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

词手和词尾锚定.PNG

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

^$:  空行

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

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

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

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

匹配整个单词.PNG

分组:\(\) :将一个或多个字符捆绑在一起,当作一个整体进行处理,如:\(root\)\+

\(root\) \+ 表示root多次

分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, …

\1:  从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;

实例: \(string1\+\(string2\)*\)

\1: string1\+\(string2\)*

\2: string2v

没有指定你要匹配的位置,它会把这一列中都符合的显示出来

捕获2.PNG

当你指定要匹配的位置后,但指定位置中出现了你要匹配的字符 ^\<\(.*\)\> 只是你匹配的字符的一部分,它也会把要配备的显示出来。这是需要你在你匹配的字符\1 前面加上一个/\1符号或者\<\1\>就行了。

捕获3.PNG

后向引用:引用前面的分组括号中的模式所匹配字符(而非模式本身)

正则表达式图表

grep的使用和正则表达式

grep的使用和正则表达式

REGEXP :由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能

扩展正则表达式:ERE

grep -E, egrep

egrep 及扩展的正则表达式

egrep = grep -E

egrep [OPTIONS] PATTERN [FILE…]

扩展正则表达式的元字符:

字符匹配:

.  任意单个字符

[]  指定范围的字符

[^]  不在指定范围的字符

次数匹配:

* :匹配前面字符任意次

egrep 匹配前面字符任意次.PNG

?: 0 或1次

egrep 匹配前面的字符0或1次.PNG

+ :1 次或多次

egrep 匹配前面字符一次或多次.PNG

{m} :匹配m次

egrep 匹配m次.PNG

{m,n} :至少m ,至多n次

egrep  匹配前面的字符至少m,至多n.PNG

位置锚定:

^ : 行首

$ : 行尾

\<, \b : 语首

\>, \b : 语尾

egrep 词首词尾锚定.PNG

分组:

()后向引用:\1, \2, …

或者:

a|b

C|cat: C 或cat

(C|c)at:Cat 或cat

egrep 分组.PNG

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

(0)
AN0519AN0519
上一篇 2016-08-10 10:27
下一篇 2016-08-10 10:27

相关推荐

  • Linux 进程及作业管理

    Linux 进程及作业管理 概述:      我们在实际的运维工作中经常要对服务器做各种监控,以了解其相关状态,比如,CPU利用率,磁盘空间利用率,等等,这就需要我们了解相关的数据并学会使用各种工具来分析数据。本章就将总结Linux系统中进程管理和作业管理的相关命令、参数和工具,包括:进程的相关定义、分类、状态以及进程查看和管理…

    Linux干货 2016-09-11
  • 浅谈群红包的实现

    前言:红包是支付的方式, 也是社交的延伸。群红包在这两块领域串联得很好, 表现尤为的浓墨重彩. 承接上两篇技术浅谈:1). 浅谈接龙红包的技术实现.2). 浅谈微信红包摇一摇的技术实现.这一次, 让我们谈谈群红包的技术实现. 一为是红包的分配算法, 二为竞抢的技术实现. 分配算法:最初玩群红包的时候, 并没有意识到分配算法的难度…

    Linux干货 2015-03-10
  • linux全方位掌握一个命令–思路比方法更重要

    Linux命令众多,当不清楚一个命令的使用方法时,我们该怎样了解命令的属性和帮助? 1.  用type命令了解一个命令的属性 [root@zejin240 testdir]# type cdcd is a shell builtin[root@zejin240 testdir]# type rmrm is aliased to `rm -i&#03…

    Linux干货 2016-10-30
  • iptables初探

    iptables 简述 基础知识 命令使用 简述 iptables是什么?netfilter又是什么? iptables是位于用户控件的一个防火墙规则控制管理工具。netfilter是位于内核中的真正的防火墙,由五个钩子函数(hooks)而组成。 iptables的作用是什么? 用来添加,删除,管理netfilter规则。 netfilter的作用是什么? …

    2016-05-31
  • Linux网络相关概念及bash脚本编程练习

    马哥教育网络班第23期+第八周课堂练习 Linux网络相关概念及bash脚本编程练习 习题: 1.请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别 (1)网桥: 橋接器(英语:network bridge),又称网桥,一種網路裝置,負責網路橋接(network bridging)之用。 橋接器将网络的多个网段在数据链路层(O…

    Linux干货 2016-11-15
  • 马哥教育网络班22期-第4周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@zck ~]# cp -r /etc/skel /home/tuser1 [root@zck ~]# ll -d /hom…

    Linux干货 2016-09-02