微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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,不支持正则表达式

原文地址:https://www.jb51.cc/regex/360566.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐