我的学习记录--grep , egrep

前端之家收集整理的这篇文章主要介绍了我的学习记录--grep , egrep前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概念:

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\> PATTERN\b

\<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

猜你在找的正则表达式相关文章