Linux环境下常用regexp的使用

正则表达式

REGular EXPression   的简写
元字符

匹配次数

位置锚定

分组

--------------------------------------
元字符
. 匹配任意单个字符

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


[^] 匹配指定范围外的
[:space:] 空白字符
[:punct:] 标点字符
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 大小写字母
[:digit:] 数字
[:alnum:] 数字和大小写字母


匹配次数(贪婪模式)

* 匹配其前面的字符任意次
a*b b前面a出现任意次数
a.*b a开头b结束
.* 任意长度任意字符

? 匹配其前面的字符1次或0次 意思是这个字符可有可无
a?b
{m,n} 匹配其前面的字符至少m次 至多n次
{1,} 至少一次
{,3} 至多3次
a.{1,3}b a和b之间至少有一个最多有三个字符

位置锚定

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

$ 锚定行尾 此字符前面的任意内容必须出现在行尾
grep 'b..h$' /etc/passwd
^$ 空白行
< 其后面的任意字符必须作为单词首部出现
> 其前面的任意字符必须作为单词尾部出现 这个符号的另一种写法


分组
()
(ab)* ab 可以出现任意次
1 第一个左括号以及与之对应的组内容

grep '(l..e).*1' test3.txt


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

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

grep '^1([0-9]):1.*1$' /etc/inittab

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


----------------------------------------------------
扩展正则表达式

字符匹配
. [] [^]

次数匹配
*
? 无需反斜杠了
+ 匹配其前面的字符至少一次 {1,}
{m,n} 不需要反斜线

位置锚定
^
$
<
>

分组
() 不用反斜杠
1,2

或者
a|b or的意思
C|cat 整个左边和右边
Cat或者cat 错
C或者cat 对

grep -E 'C|cat' text.txx

{3}重复三次

fgrep 不支持正则表达式 特别快

原文地址:https://www.cnblogs.com/manue1/p/4477178.html