grep正则表达式及扩展表达式

文本查找的需要:

grep:global research,根据模式,搜索文本,并将符合模式的文本行显示出来。

egrep,fgrep

pattern:模式英文,文本字符和正则表达式的元字符组合而成匹配条件。

grep [optians] [pattern] file...

-i --ignore-case 忽略大小写

--color

-v 反向查找 被模式匹配的行不显示

-o 只显示被模式匹配到的字符串

* :任意长度的任意字符

?:任意单个字符

[]:指定范围内的

[^]:指定范围外的


正则表达式:Regular EXPression,REGEXP

grep 'pattern' file

元字符:

.:匹配任意单个字符;

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

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

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

匹配次数

*:匹配其前面的字符任意次

a,b,ab,aab,acb,adb,amnb

a*b

a.*b

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

\?:做次数匹配,匹配其前面的字符一次或零次

正常工作在贪婪模式下,尽可能长的去匹配

\{m,n\}:匹配其前字符至少M次,至多N次

\{1,\}至少一次

\{0,3\} 最多三次

grep 'a\{1,3\}b a

位置锚定:

^:锚定行首,此字符后面的任意内容必须出现在行首。

grep '^r..t' /etc/passwd

$:锚定行尾,此字符前面的任意内容必须出现在行尾

grep 'y$' /etc/inittab

grep 'b..h$' /etc/passwd

^$:空白行

锚定词首:

\<: 其后面的任意字符必须作为单词,首部出现,锚定词首

\>:其前面的任意字符必须作为单词,尾部出现,锚定词尾

\<root\>

\broot\b =\<root\>,可以使用b代替<,>

分组:

\(\)

\(ab\)* ab可以出现0次,1次,任意次

grep '\(l..e\).*\(l..e\)' a 匹配以l..e的,并且中间是任意字符


\1:引用第一个左括号以及与之对应的右括号所包括的所有内容

\2:

\3:

grep '\([0-9]\).*\1$ /etc/inittab 行中出现数字并且以相同数字结尾的

grep '\(^[0-9]\).*\1$ /etc/passwd 以首先开关的数字并且以相同数字结尾的

练习:分析/etc/inittab文件中如下文件中前两行的特征(每一行中出现数字必须相同),请写出可以精确找到类似两行的模式:

11:1:wait:/etc/rc.d/rc 1

13:3:wait:/etc/rc.d/rc 3


grep '^1\([0-9]\).\1.*\1$'

正则表达式:

Basic REGEXP:基本

Extended REGEXP:扩展

基本正则表达式:

.:任意单个字符

[]:指定范围

[^]:指定范围以外的

次数匹配:

*:其前的任意次

\?:0次或者1次

\{m,n\)}:至少M次,到多N次

.*:任意长度的字符

锚定:

^:行首

$:行尾

\<,\b:后面的任意单词,必须出现在首部

\>,\b:前面的任意单词,必须出现在尾部

\(\)用于分组的

\1,\2,\3.....用于后向引用

grep:使用基本正则表达式定义的模式来过滤文本的命令

-i

-v 反向搜索,不匹配的显示

-o 只显示匹配到的字符串

--color

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

-A#(数值):当某一行被grep指定的模式匹配后,

grep -A 2 '^core id' /proc/cpuinfo 后面的2行

-B:

grep -B 2 '^core id' /proc/cpuinfo 前面2行

-C:-C2 前后各2行

扩展正则表达式:

字符匹配:与基本一样

.

[]

[^]

次数匹配

*:与基本一样

?:其前一次或零次

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

+*近似*

{m,n},不需要使用\,直接使用

位置锚定与基本一样

分组:

():分组

\1,\3,....

|:或者:a|b or的意思

grep --color -E c|cat a.txt

egrep '\b([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-9]\b'

ifconfig | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}'

ifconfig | grep -o '\b[0-9]\{1,3\}\b\.\b[0-9]\{1,3\}\b'

-o 匹配串本身

ifconfig eth0 | grep -o '\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}'

ifconfig ens160 | sed -nr 's/inet (.*) net.*/\1/p'

ifconfig ens160 | grep -Po '(?<=inet)(.*)(?=net)'


cat /etc/inittab | grep '^#$' | wc -l

cat /etc/inittab | grep '^#$'

IPV4:

5类:A B C D E

A:1-127

B:128-191

C:192:223

fgrep:fast,不支持正则表达式

相关文章

一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^d{n}$ 3 至少n位的数字:^d{n,}$ 4 m-n位的数字...
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。下面整理一些常用的正则...
0. 注: 不同语言中的正则表达式实现都会有一些不同。下文中的代码示例除特别说明的外,都是使用JS中的...
 正则表达式是从信息中搜索特定的模式的一把瑞士军刀。它们是一个巨大的工具库,其中的一些功能经常...
一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数...
\ 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,“n”匹配字符“n”。“\n...