本文旨在学习grep命令,基本/扩展正则表达式
1. grep命令
grep:根据模式搜索文本,并将符合的文本显示出来。本身的意义就是做部分匹配的。
pattern(模式):文本字符和正则表达式的元字符组合而成匹配条件。
grep常用选项:
-o:只显示被模式匹配到的字符串
-n:在匹配到的字符串行首显示行号
-v:显示没有被模式匹配到的字符串
-i:表示忽略字符大小写
-c:计算匹配到的字符串的次数
-w:只显示全字符符合的行
-x:只显示全行符合的行
-q:静默模式,不输出任何信息
-E: 使用扩展的正则表达式
-A #(数字):显示被匹配到的行和后面的#行
-B #(数字):显示被匹配到的行和前面的#行
-C #(数字):显示上下文
2. 基本的正则表达式 REGular EXEperssion REGEXE
元字符:
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
字符集合:
[:digit:] 数字
[:lower:] 小写字母
[:upper:] 大写字母
[:alpha:] 所有字母
[:alnum:] 所有数字和字母
[:space:] 空白字符
[:punct:] 标点符号
匹配次数(贪婪模式):
* :匹配其前面的字符任意次(也可以是0次)
.* :任意长度任意字符
\?(反斜线做转义) :匹配其前面的字符1次或者0次。
\{m,n\} :匹配其前面的字符至少m次,至多n次
\{1,\} :表示至少1次
\{0,3\} :最多3次
位置锚定:
^ :锚定行首,此字符后面的内容必须出现在行首
$ :锚定行尾,此字符前面的任意内容必须出现在行尾
^$ :匹配空行
^[[:space:]]*$ :空白行
\<或者\b :锚定词首,其后面的任意字符必须作为单词的首部出现
\>或者\b :锚定词尾,其前面的任意字符必须作为单词的尾部出现
\<root\>或者\broot\b :表示必须是root整个单词出现
注意:\b有时候会显示不准确,建议尽量显示\<,\>。
分组:
\(\)
\(ab\)* :后向引用,把ab作为一个整体,可以出现0次,1次或者任意次。
\1 :引用第一个左括号与之对应的右括号所包含的所有内容
\2 :
\3 :
3. 扩展的正则表达式
字符匹配(与基本的正则表达式相同)
. :匹配任意单个字符
[] :匹配指定范围内的任意单个字符
[^] :匹配指定范围外的任意单个字符
次数匹配:
*
.* :匹配任意长度的任意字符
? :匹配其前面的字符1次或者0次
+ :匹配其前面字符至少一次,相当于\{1,\}。?和+组合相当于*
{m,n} :做次数匹配。扩展正则表达式不用加反斜线。
例:取一个路径的基名
[[email protected] ~]# echo /etc/sysconfig/network | egrep -o ‘[[:alnum:]]+/?$‘
network
[[email protected] ~]# echo /etc/sysconfig/ | egrep -o ‘[[:alnum:]]+/?$‘
sysconfig/
注意:体会?这里的妙用。
位置锚定:(与基本的正则表达式相同)
^ :锚定行首
$ :锚定行尾
\<或\b:锚定词首
\>或\b:锚定词尾
分组:
()
\1, \2, \3, …….后项引用
| :或者(or的意思)
a|b :a或者b
C|cat :C或者cat
4. 练习题
http://zhangbei.blog.51cto.com/11081042/1775836