当前位置: 首页>前端>正文

linux grep 标准输入作为关键字 正则 grep命令正则表达式

grep及正则表达式

一、grep

1、grep定义

Globally search a Regular Expression and Print 

全局搜索(匹配正则表达式的)并打印

 

扩展命令:

egrep:扩展grep,相当于grep -E 命令,使用扩展正则匹配。

fgrep:fast grep,不支持正则匹配的grep,只能匹配字符本来的意义。

 

grep与egrep的区别是egrep支持更多扩展的正则

 

2、grep参数(#代表数字)

-v:显示不匹配的行

-i:忽略字母大小写

-o:只打印匹配的字符

-E:扩展正则表达式

-A #:显示匹配的行以及匹配行后的#行

-B #:显示匹配的行以及匹配行前的#行

-C #:显示匹配的行以及匹配行前后的各#行

--color:定义匹配字符的颜色

 

颜色标记匹配的字符配置:

alias grep='grep --color=auto'

alias egrep='egrep --color=auto'

 

永久生效修改文件/etc/bashrc添加上面两行内容

3、各个参数举例:

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式,第1张

 

二、正则表达式

 

1、字符匹配

. :匹配一个字符

[]:匹配范围内任意单个字符

[^]:匹配范围外任意单个字符

例:

原始文件

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_02,第2张

 

.:匹配任意一个字符

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_03,第3张

[]:匹配a,b两个字符

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_04,第4张

 

[^]:匹配除了a,b,c三个以外的任意字符

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_bash_05,第5张

扩展:

[0-9]  [[:digit:]] 匹配数字

[a-z]  [[:lower:]] 匹配小写字母

[A-Z]  [[:upper:]] 匹配大写字母  

[[:space:]]  匹配所有空白字符(空格,制表符,新行)

[0-9a-zA-Z] [[:alnum:]]  匹配字母及数字

[a-zA-Z]    [[:alpha:]]  匹配字母

[[:punct:]]  标点符号

 

2、次数匹配

* :任意次数

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

\?:0次或1次

\+:1次或多次

\{m\}:m次

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

\{0,n\}:至多n次

\{m,\}:至少m次

例:

*:匹配l任意次数

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_shell_06,第6张

.*:匹配h开头的任意行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_07,第7张

 

\?:匹配el字符,l可以是0次或1次

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_08,第8张

 

\+:匹配el,l最少1个

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_09,第9张

\{m\}:匹配ell字符

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_shell_10,第10张

\{m,n\}:匹配el,l最少1次,最多2次

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_11,第11张

\{0,n\}:匹配el,l最多2次,

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_12,第12张

\{m,\}:匹配el,l最少1次

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_bash_13,第13张

3、定位匹配

^:匹配行首

$:匹配行尾

\<,\b:匹配单词词首

\>,\b:匹配单词词尾

例:

^:匹配以h开头的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_14,第14张

$:匹配以d结尾的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_bash_15,第15张

\<:匹配以h开头的单词

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_bash_16,第16张

 

\>:匹配以o结尾的单词

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_bash_17,第17张

 

\<\>:匹配单词hello

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_18,第18张

 

4、分组和引用

\(\):小括号内的为一组

\1,\2,……引用分组,1为第一个小括号内容,2为第二个小括号内容……

例:匹配以4个字符开头并且与开头相同4个字符结尾的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_19,第19张

 

5、元字符总结:

正则表达式及grep

字符匹配:. [] [^]

次数匹配:* \+ \? \{\}

定位匹配: ^ $ \< \>

分组和后向引用:\(\) \1,\2……

 

扩展正则表达式及egrep

字符匹配:. [] [^]

次数匹配:* + ? {}

定位匹配:^ $ \< \>

分组和后向引用:() \1,\2……

或者:a|b 

扩展正则表达式举例(为省事和上面的例子顺序相同,只截了3个图)

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_shell_20,第20张

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_21,第21张

|:匹配w或W的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_22,第22张

 三、作业

1、显示/etc/passwd文件中以bash结尾的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_shell_23,第23张

2、显示/etc/passwd文件中的两位数或三位数

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_24,第24张

3、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_25,第25张

4、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_26,第26张

5、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_27,第27张

6、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行

linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_shell_28,第28张

7、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其完整路径和目录名

目录名:


# echo /etc/rc.d/init.d/functions|grep -o '/.*/' |grep -o '\<[a-zA-Z.]\+\>/$'|grep -o '[a-zA-Z.]\+'


linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_正则表达式_29,第29张

8、找出ifconfig命令执行结果中1-255之间的数字



# ifconfig |egrep '\<[1-9]\>|\<[1-9][0-9]\>|\<1[0-9][0-9]\>|\<2[0-4][0-9]\>|\<25[0-5]\>'



合并相同的[]为[]{},合并后简写结果



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



省略多余的\<\>,合并简写结果



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



linux grep 标准输入作为关键字 正则 grep命令正则表达式,linux grep 标准输入作为关键字 正则 grep命令正则表达式_字符匹配_30,第30张


转载于:https://blog.51cto.com/4708705/1684146


https://www.xamrdz.com/web/2qx1957645.html

相关文章: