grep正则表达式使用

正则表达式:Regular Expression REGEXP

        由一类特殊字符及文本字符所编写的模式,表示控制或通配的功能

两类:

    基本正则表达式BRE:

    扩展正则表达式ERE:


*** grep    GLoble search  Regular  exression and  Print out the line

文本过滤(一定模式pattern)2

-v    反向匹配 显示未匹配到的行

-E    支持扩展正则表达式  egrep

-i    忽略字符大小写

-o    仅显示匹配到的字符本身 而不是整行

-q --quiet      静默模式,不输出任何信息   可用echo $?查看命令执行情况

-A :after      显示匹配行及其前n行

B :before     匹配行及其后n行

C :context    匹配行及其前后n行

1.基本正则表达式元字符:

.     任意 单个字符

*     前面字符 任意次 可以不出现 0 - ∞

.*    任意长度 任意字符

\?    其前面字符 0次或一次   可有可无

\+    其前面字符 1次或多次

\{m,n\}   其前面字符m至n次

 \{m\}   指定出现m次   \{,n\}  至多n次

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

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

数字 [:digit:],小写字母[:lower:],大写字母[:upper:],字母[:alpha:],

字母数字[:alnum:],标点[:punct:],空格[:space:]

 使用时还需再加[]     [[:digit:]] 任意单个数字

 

2.位置锚定:    指定字符出现位置

^    行首锚定,整个模式最左侧

$    行尾锚定,整个模式最右侧

^pattern$    用patt匹配整行

^$   空白行  不可包含空格     ^[[:space:]]*$ 空白行或包含任意空格的行

\<或\b     词首锚定

\>或\b     词尾锚定

\<pattern\>匹配完整单词

 

 

3.分组及引用:

\(\)     括号内的字符作为一组   \(xy\)\+  一个或多个xy 括号可嵌套不可交叉

可用\1   \2   \3  …引用对应分组

 

 

 


*** 扩展正则表达式:          区别grep  部分元字符不用加"\"      增加或 |

    egrep         =>grep -E


1.扩展正则表达式的元字符:

.

[]

[^]

2.次数匹配:        不用加转义字符  "\"

*

?

+

{m}

{m,n}

3.位置锚定:

^

$

\<,\b

\>,\b

4.分组及引用:

()

后向引用:\1  \2  \3  ...

5.或:

a|b   a或者b    z|Zjj   z或Zjj                (z|Z)jj   zjj或Zjj

 例   匹配1到255

egrep -o '\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>'

 例   passwd 用户名与shell相同的行

egrep  "^([^:]+\>).*\1$" /etc/passwd

 

 例   简单 过滤出ip地址 不严谨

egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}"

 

 

不支持正则表达式元字符:

fgrep:    fast grep  

用不到元字符时 fgrep更快


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章