bash为我们提供了很多文本查找的命令。其中有三个命令是要用到正则表达式的、需要和元字符配合一起是用的,他们是grep、awk、sed。这三个命令频繁的使用在脚本以及查找文本中。
先让我们来对grep有个概况的认识。大家都知道cat、head、tail、more、less是用来查看文本内容的命令。但是当我们只想让符合条件的文本内容才做输出的时候,grep就派上了用场。例如:我们只想显示默认shell为bash的用户信息时,我们可以输入
#grep “/bin/bash$” /etc/passwd
这个时候输出的结果只会显示默认shell为bash的用户行的信息了。
要认识grep这个命令让我们先通过man命令来了解一下linux是怎么介绍grep的。
#man grep
gerp是用于显示同给定条件相匹配行的信息:其中
grep:适用于基本正则表达式。
egrep:等同于“grep -E”使用于扩展正则表达式。
fgrep:等同于“grep -F”不支持正则表达式元字符。搜索速度快。
(以下所有的描述只适用于grep的基本正则表达式,grep的扩张正则表达式不包括在内)
grep相关选项的介绍
-v:--invert-match 指的是取反。加了这个参数后输出的结果就成为满足条件的不输出,不满足条件的才输出了。
-i:--ignore-case指的是忽略大小写。使用这个参数后在对元字符做匹配的时候就会忽略元字符的大小写,将大写的信息和小写的信息都输出出来。
-o:--only-matching。使用了这个参数以后。将只会显示匹配的字符串了,而不再以整行输出。
-n:--line-number。输出行号。
-A:--after-context=NUM。显示符合条件的行及其后几行。
-B:--beforce-context=NUM。显示符合条件的行及其前几行。
-C:--context=NUM。显示符合条件的行及其前后的行
--color=auto:在显示的结果中将符合条件的字符用系统默认的颜色显示。
要使用grep命令只是了解上面的参数是不够的,还需要了解元字符。grep命令中所有条件的设定都是通过元字符来实现的。
那什么是元字符了。元字符是在正则表达式中有特殊含义的字符。因为元字符在正则表达式中代表着特殊的意义,使得他不再代表自己本身,所以在使用元字符的时候我们往往需要通过转义\。那么我们就来认识一下元字符:
做次数匹配的元字符:
\?:匹配紧挨在其前面的字符0次或者1次。需要注意:1,是匹配之前的字符而不是字符串。2,可以0次。例如:a\?b:意思是指b前面的a被匹配0次或者1次就将这行显示出来。翻译一下,只要这行里面有b的都会被显示出来。因为a可以被匹配0次。
*:匹配紧挨着其前面的字符0次到无穷次。用法跟\?类似。
\{m,n\}:匹配紧挨之前的字符至少m次最多n次。m和n代表数字。
如果只做至少匹配次数可写为\{m,\}
如果要做精准匹配要求可写为\{m\}
匹配字符的元字符:
. :表示匹配任意单个字符。
[]:表示匹配指定范围内的任何一个字符。比如[a-c]只要出现了a,b,c这个三个字符中的任何一个就视为匹配。在使用[]做单个字符的铆钉的时候我们可以方括号中使用如下的字符集
[:lower:]:表示所有的小写字母。
[:upper:]:表示所有的大写字母。
[:alpha:]:表示所有的字母,包括大小写。
[:digit:]:表示所有的数字。
[:alnum:]:表示所有的字母和数字。
[:space:]:表示空白字符。
[:punct:]:表示所有的符号。
[^]:表示取反。不符合条件的字符才匹配。
匹配字符串的元字符:
\<:铆钉词首。需要特别注意的是\<后面跟的可以是字符串,那么字符串就成为了条件。只要符合条件的字符串出现在单词最前面就会被匹配。
\>:铆钉词尾。用法同铆钉词首。
\<pattern\>:单词铆钉
\(\):做分组匹配。可以将匹配的内容在后面做调用。
^:铆钉行首。^后面跟的可以是字符串。只要指定的字符串出现在行首就视为匹配。
$:铆钉行为。$前面跟的可以是字符串。只要指定的字符串出现在行尾就视为匹配。
^$:表示匹配条件是空白行。
以上就是关于grep命令及其适用正则表达式的基本介绍。grep命令非常重要,要想熟练适用只有勤练习。