加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我的学习记录--grep , egrep

发布时间:2020-12-14 01:22:50 所属栏目:百科 来源:网络整理
导读:概念: grep (Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 grep:传统的grep程序,支持基本正则表达式 egrep:扩展的grep程序,支持扩展正则表达式 正则表达式:简单

概念:

grep (Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

grep:传统的grep程序,支持基本正则表达式

egrep:扩展的grep程序,支持扩展正则表达式

正则表达式:简单来说就是,用一串自己定义的条件字符串,去匹配检索文档中符合条件的字符。


grep基本格式:

grep [OPTIONS] PATTERN [FILE...]

常用选项:

-o:只显示被模式匹配到的内容

-i:(ignore case) 搜索时不区分字符大小写

-v:显示不能够被模式匹配到的行

-E:使用扩展正则表达式

-A #:显示被模式匹配到的行以及下#行

-B #:显示被模式匹配到的行以及上#行

-C #:显示被模式匹配到的上下#行

--color[=WHEN],--colour[=WHEN] :

用于设置匹配到的字符,显示高亮颜色否,有三个选项auto ,always ,never

例如:

wKiom1UbyYHAM-PcAAB5V84jxFc457.jpg


基本正则表达式元字符:


字符匹配:

. :匹配任意单个字符

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

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


次数匹配:在期望匹配字符后面提供一个控制符,用于表达匹配其前面字符指定的次数

* :任意长度,表示0次,1次或多次;

.*:任意长度的任意字符(工作于贪婪模式,尽可能长的进行匹配)

?:匹配其前的字符0次或1次,表示其左侧字符可有可无

+:匹配其前面的字符1次或多次,表示其左侧字符至少出现一次

{m}:精确匹配其左侧字符出现m次

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

{0,n}:至多n次

{m,}:至少m次


位置锚定:

^:锚定行首,形如:^PATTERN

$:锚定行尾,形如:PATTERN$

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

例如:

grep "^$" 匹配空白字符的行(有空格的行不能匹配)

grep "^[[:space:]]*$" 匹配所有空行(可以有空格)

grep "^sh.*sh$" /etc/passwd 匹配/etc/passwd文件中以sh开始,sh结尾的整行

单词锚定:由非特殊字符组成的连续的字符串

&;:锚定词首 也可用b,形如:&;PATTERN bPATTERN

例如:grep "&;sh" /etc/passwd 匹配/etc/passwd文件中以“sh”开头的单词

&;:锚定词尾,也可以用b,形如:PATTERN&; PATTERNb

&;PATTERN&;:匹配PATTERN能匹配的整个单词


分组匹配:

(PATTERN)

注意:分组中的模式,在某次的具体匹配过程中所匹配到的字符,可以被grep记忆(保存于内置的变量中,这些变量时1,2,...),因此,还可以被引用

1:引用,模式中左到右,由第一个左括号以及与之对应的右括号中的模式所匹配到的内容

2:引用,模式自左而右,由第二个左括号以及与之对应的右括号中的模式所匹配到的内容

例如:

grep"(a.b).*1" FILE.. 用于匹配文件行中出现了"a.b",且后面再次出现了前方“a.b”匹配到的相同字符串

如图:

wKioL1Ub0WGRkA_4AACoWibJEl4592.jpg

amb hello amb 匹配

amb hello anb 不匹配 1匹配的是前面匹配到的内容amb,而非(a.b)模式



扩展的正则表达式元字符:(无特殊说明则用法和基本正则表达式相同)

字符匹配:

. :匹配任意单个字符

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

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

次数匹配:

*:任意次

?:0或1次

+:至少1次

{m}:精确匹配m次

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

{m,}:至少m次

{0,n}:至多n次

位置锚定:

^:行首

$:行尾

&;,b:词首

&;,b:词尾

^$:空白行

分组:

(PATTERN):引用1,...


或者:(两侧的所有内容)

a|b :a或者b

abc|CBA: abc或者CBA


egrep(grep -E)命令:(基本和grep一样)

grep -E PATTERN FILE...

egrep PATTERN FILE...

练习:

1.显示/proc/meminfo文件中以大写或小写S开头的行;

# grep -i "^s" /proc/meminfo --color=auto 或;

# grep "^[sS]" /proc/meminfo --color=auto

wKioL1Ub0mDi-VCwAABYn_jaOBc509.jpg

用扩展正则表达式书写:

# egrep -i "^s" /proc/meminfo --color=auto

wKiom1Ub1trzqjMKAABY7ZB6bws140.jpg

2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户

# grep -v "nologin$" /etc/passwd ;-v 显示不被匹配到的行

wKioL1Ub0_6ifbTJAACzE_NMBp4740.jpg

用扩展正则表达式书写:

# grep -E -v "nologin$" /etc/passwd ;-E 表示使用扩展正则表达式

wKiom1Ub106i5gBHAACnAJGmL6k417.jpg


3.找出当前系统上其用户名和默认shell相同的用户的信息

#grep "^(.*)&;.*1$" --color=auto /etc/passwd

wKiom1Ub0_vj-7XIAADEVG1kv8U261.jpg

用扩展正则表达式书写:

#grep "^(.*)&;.*1$" --color=auto /etc/passwd

wKiom1Ub1_7jtfoAAADElo_hEL8683.jpg

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读