基本元字符集及其含义
^ | 只匹配行首 |
$ | 只匹配行尾 |
* | 匹配字符个数,匹配0或多个单字符 |
[] | 匹配 []内字符。可以是一个单字符,也可以是字符序列。 可以使用-表示[] 内字符序列范围,如用[1-5] 代替 [12345] |
/ | 用来屏蔽一个元字符的特殊含义 |
. | 匹配任意单字符 |
+ | 匹配一个或多个字符 (适用于awk) |
? | 匹配0次或者1次(适用于awk) |
pattern/{n/} | 用来匹配pattern出现的次数,n为次数 |
pattern/{n,/} | 同上,但次数最少为n |
pattern/{m,n/} | 同上,但次数在m与n之间 |
grep
grep是Unix/Linux中使用最广泛的命令之一。grep允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。
grep一般格式为:
grep [选项] 基本正则表达式 [文件]
这里基本正则表达式可为字符串。
引号的使用
在grep命令中输入字符串参数时,最好将其用引号括起来。这样在查找时可以避免一些不必要的问题。比如查找多个单词组成的字符串’abc abc’,将变量作为字符串时“$STR” 等等。
grep选项
-c 只输出匹配行的计数
-i 不区分大小写
-h 查询多文件时不显示文件名
-l 查询多文件时只输出包含匹配字符的文件名
-n 显示匹配行及行号
-v 显示不包含匹配文本的所有行
使用grep精确匹配的一种有效方式是在抽取字符串后加/>假定精确抽取abc,方法如下:
grep ‘abc/>’ eg.out 返回的结果为包含abc单独字符串的行。
grep和正则表达式
1模式范围
grep ‘abc[de]’ eg.out
匹配abcd或者abce
2不匹配行首
grep ‘^[^abc]’ eg.out
不匹配行首为abc的行
3匹配任意字符
grep ‘a...e’ eg.out
匹配第一个字符为a,第五个字符为e,中间为任意字符的行.
4匹配日期
grep ‘[0-9]/{1,5/}-[0-9]/{2/}-[0-9]/{2/}’ eg.out
匹配含有2010-05-01这样形式的日期的行
5匹配空行
grep ‘^$’ eg.out
6匹配ip地址
grep ‘[0-9]/{3/}/.[0-9]/{3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}’ eg.out
7其它
如果要查找目录列表中的目录,方法如下:
ls -l | grep ‘^d’
如果在一个目录中查询不包含目录的所有文件,方法如下:
ls -l | grep ‘^[^d]’
从系统上运行的进程中查询某一进程是否运行
ps aux | grep ‘named’