linux强大文本搜索工具,Linux文本搜索工具grep

Linux文本搜索工具grep

简介

grep(全称Globally search a Regular Expression and Print,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行匹配检查,打印匹配到的行。

家族成员:

grep:支持基本正则表达式

egrep:相当于grep -E,支持扩展正则表达式

fgrep:相当于grep -F,不支持正则表达式

主要参数及使用

grep

格式: grep [OPTIONS] PATTERN [FILE…]

常用选项:

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

注: CentOS 7默认设置该参数。

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

# cat test

how are you?

hellow

# grep -v are test

hellow

提示:如test文件内容发生改变,会用cat命令将其展示,反之则表示内容不变

-i:忽略字符大小写

# cat test

how are you?

HOW ARE YOU?

# grep are test

how are you?

# grep ARE test

HOW ARE YOU?

# grep -i are test

how are you?

HOW ARE YOU?

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

# cat test

how are you?

# grep -o are test

are

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

静默模式下不会输出任何信息,命令的执行结果可以通过echo $?查询。

# cat test

name

# grep -q name test

# echo $?

0

# grep -q what test

# echo $?

1

-A #:显示匹配的后#行信息

# cat test

how are you?

HOW ARE YOU?

hello

# grep -A 1 ARE test

HOW ARE YOU?

hello

-B #:显示匹配的前#行信息

# grep -B 1 ARE test

how are you?

HOW ARE YOU?

-C #:显示匹配的前后各#行信息

# grep -C 1 ARE test

how are you?

HOW ARE YOU?

hello

基本正则表达式

正则表达式由普通字符和元字符组成。普通字符包括大小写字母和数字,而元字符则具有特殊意义,接下来将对元字符进行介绍。

字符匹配:

.:匹配任意单个字符

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png 

专用字符集合:

[:digit:]:任意数字,相当于0-9

[:lower:]:任意小写字母

[:upper:]:任意大写字母

[:alpha:]:任意大小写字母

[:alnum:]:任意数字或字母

[:space:]:空格

[:punct:]:标点符号

匹配次数:

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

*:匹配前面字符任意次

3c8ce6380daa33c267ccb0e2e66a02de.png 

注:a*c筛选的是含有c的行,a*是指a可以出现任意次也可没有。

.*:匹配任意长度的任意字符(.为任意字符 *为任意次数)

3c8ce6380daa33c267ccb0e2e66a02de.png

\?:匹配其前面的字符0或1次,即前面的可有可无

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png 

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

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

位置锚定:

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

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png

^PATTERN$:用模式匹配整行

3c8ce6380daa33c267ccb0e2e66a02de.png

^$:匹配空行,主要配合-v取反消除空行

^[[:space:]]*$:在^$匹配不到的时候使用

\

3c8ce6380daa33c267ccb0e2e66a02de.png

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

3c8ce6380daa33c267ccb0e2e66a02de.png

\:匹配整个单词

3c8ce6380daa33c267ccb0e2e66a02de.png

分组:

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

3c8ce6380daa33c267ccb0e2e66a02de.png

当我们想后续内容与前面模式匹配到的一样,则需要使用到引用也称后向引用。

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

3c8ce6380daa33c267ccb0e2e66a02de.png

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

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

例: (ab+(xy)*)

\1: ab+(xy)*

\2: xy

egrep

egrep=grep -E

格式:egrep [OPTIONS] PATTERN [FILE…]

常用选项与grep相同

扩展正则表达式

相对于基本正则表达式而言扩展正则表达式在某些参数上可以不使用转义符(\),在使用方式上并没有区别

接下来将介绍扩展正则表达式与基本正则表达式不同的地方,相同点不再累述

次数匹配

?:匹配其前面的字符0或1次,即前面的可有可无

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

{m}:匹配前面的字符m次

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

分组

():将一个或多个字符捆绑在一起,当作一个整体进行处理

或者

注:基本正则表达式可以使用\|代表或者

a|b:a或者b

C|cat:C或cat

(C|c)at:Cat或cat

fgrep

fgrep不支持正则表达式,表达式仅作普通字符处理

fgrep=grep -F

原创文章,作者:Net18-海滨,如若转载,请注明出处:http://www.178linux.com/13872

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值