正则表达式的定义:
计算机科学中,有一种使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,它就叫做正则表达式。
正则表达式的功用:
在文本编辑器中,正则表达式通常被用来检索、替换那些符合某个模式的文本。许多程序设计语言中,也都支持正则表达式来进行字符串的操作。因此它被广泛应用到各种计算机语言和领域中。
正则表达式的分类:
正则表达式就其表现形式来说,一般分为两类。基本的正则表达式和扩展的正则表达式。下面我们就此展开说明:
基本正则表达式:
字符匹配:
.匹配任意单个字符
[]匹配指定范围内的任意单个字符
[0-9],[[:digit:]]所有数字
[a-z],[[:lower:]]所有小写字母
[A-Z],[[:upper:]] 所有大写字母
[[:space:]] 空格
[[:punct:]] 所有标点符号
[[:alpha:]] 所有字母
[[:alnum:]] 所有数字和字母
[^]取反
.*匹配任意长度的任意字符
次数匹配:
*前面字符可出现任意次
\?前面字符可出现0次或1次
\{m\}前面字符要出现m次
\{m,n\}前面字符至少出现m次,至多出现n次
\{m,\}前面字符至少出现m次
\{0,n\}前面字符至多出现n次
位置锚定:
^锚定行首
$锚定行尾
^$空白行
\<锚定词首
\>锚定词尾
分组引用:
\(\)分组
\#引用
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
扩展正则表达式:
字符匹配:
.匹配任意单个字符
[]匹配指定范围内的任意单个字符
[0-9],[[:digit:]]所有数字
[a-z],[[:lower:]]所有小写字母
[A-Z],[[:upper:]] 所有大写字母
[[:space:]] 空格
[[:punct:]] 所有标点符号
[[:alpha:]] 所有字母
[[:alnum:]] 所有数字和字母
[^]取反
.*匹配任意长度的任意字符
次数匹配:
*前面字符可出现任意次
?前面字符可出现0次或1次
+前面字符至少出现1次
{m}前面字符要出现m次
{m,n}前面字符至少出现m次,至多出现n次
{m,}前面字符至少出现m次
{0,n}前面字符至多出现n次
位置锚定:
^锚定行首
$锚定行尾
^$空白行
\<锚定词首
\>锚定词尾
分组引用:
()分组
\#引用
或者:
#|n或者
---------------------------------------------------------------------------------------------------------------------------------
grep的定义:
grep全称global search regular expression and print out the line,即全面搜索正则表达式并把行打印出来。
grep的功用:
grep是一种强大的文本搜索工具,能使用正则表达式搜索文本,并把匹配的行打印出来。
grep家族的分类:
Unix的grep家族包括grep、egrep和fgrep。egrep是grep的扩展,支持更多的正则元字符。而fgrep是fixed grep或fast grep,是把所有的字母都看作单词,所以它不再支持正则表达式的应用。
grep的选项:
-v反向选取
-o仅显示匹配的字串,而非字串所在的行
-iignore-case,忽略字符大小写
-E支持使用扩展正则表达式
-A #显示后面#行
-B #显示前面#行
-C #显示前后#行
---------------------------------------------------------------------------------------------------------------------------------
实例:
1.显示/proc/meminfo文件中以大写或小写S开头的行;
grep -i '^s' /etc/passwd
2.显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;
grep -v "/sbin/nologin$" /etc/passwd | cut -d: -f1
3.找出/etc/passwd文件中的一位数或两位数;
grep "\<[0-9][0-9]\?\>" /etc/passwd
4.显示/boot/grub/grub.conf中以至少一个空白字符开头的行;
grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf