linux之正则表达式

    正则表达式是一个描述一组字符串的模式,有许多普通字符和元字符组成的字符集。正则表达式的主要作用就是进行文本搜索和字符串处理的,一个正则表达式匹配一个字符或字符串。

    正则表达式的字符集种类:

    

字符集名称 含义
[:alnum:] 匹配字母和数字字符;等同于A-Z,a-z,0-9
[:digit:] 匹配数字0-9
[:alpha:] 匹配所有字母含A-Z,a-z
[:lower:] 匹配所有小写字母a-z
[:upper:] 匹配所有大写字母A-Z
[:space:] 匹配空白字符

    基本正则表达式的元字符:

元字符类型 含义
举例
. 匹配除换行符外任意一个字符 112.将匹配112+至少一个字符如1122、112d,但不匹配112
[] 匹配任意范围内单个字符 [ABC]将匹配字符A、B、C中任意一个;[a-z]将匹配所有小写字母中的任意一个;
[^] 匹配任意范围外单个字符 [^ABC]将匹配字符除了A、B、C的任意一个字符
* 匹配其前面的字符串或正则表达式任意次包括0次 如112*将匹配112+多个或0个2,如112、1122、1122222等
\? 匹配0次或一次其前面的字符串,其前面的字符可有可无 如112\?将匹配11、11211
\{m\} 具体匹配其前面的字符要m次 he\{3\}匹配heee
\{m,n\} 具体匹配其前面的字符要在m次与n次之间 he\{0,3\}匹配heee、hee、he、h
\{m,\} 匹配其前面的字符最少n次 he\{3,\}匹配heee、heeeee等
\{0,m\} 匹配其前面的字符最多n次 he\{0,1\}匹配h、he
.* 任意长度任意字符 a.*b匹配所有以a开头b结尾的字符串
^ 行首匹配,指定字符必须出现在行首 ^root只匹配以root开头的行
$ 行尾匹配,指定字符必须出现在行尾 /bash$匹配以"/bash"结尾的行
^$ 空白行
\< \b 词首锚定,写在单词最左端 \<abc
\>  \b 词尾锚定,写在单词最右端 abc\>
\(\) 分组,分组中的模式匹配到的内容,可由正则表达式引擎记忆在内存中,之后可被引用 \(ab\)*
\#
引用,表示对分组中的内容进行#次引用

 


扩展正则表达式:

 

. [] [^] 含义与基本正则表达式一样

* ? {m}{m,}

{m,n} {0,m}

与基本正则表达式一样,只是?和{}无需\进行符号转义
+ 匹配前面的字符至少一次
^ $ \<  \b  \> 与基本正则表达式一样,同样分别表示行首、行尾、词首和词尾锚定
()
表示分组的意思
| 或者表示选择关系
^$ 表示空白行,等同^[[:space:]]*$

 

常用的搜索命令:grep、egrep

  命令常用参数:

-v 反向匹配,显示没有匹配到的行
-o 仅显示匹配的字串,而非字串所在的行
-i 忽略字符大小写
-E 支持使用扩展正则表达式
-A# 显示匹配行的后面指定数目行
-B# 显示匹配行的前面指定数目行
-C# 显示匹配行的前后指定相同数目行

  实例:

1、显示/etc/passwd中的root账户信息,可以看出^符号的作用了

 wKiom1UogAezf4O2AACZGGsrvlg624.jpg


 


你可能感兴趣的:(linux,正则表达式)