Linux GNU grep
时间:2008-07-08 来源:benxiong
grep 'pattern' filename(s) |
2.grep支持的正则表达式元字符集
2.1 基本集
元字符 | 功能 |
^ | 行首定位符 |
$ | 行尾定位符 |
. | 匹配单个字符 |
* | 匹配零个或多个字符 |
[] | 匹配集合中的一个字符 |
[^] | 匹配非集合中的一个字符 |
\< | 词首定位符 |
\> | 词尾定位符 |
\(..\) | 标签匹配字符 |
x\{m\} |
字符x重复m次 |
x\{m,\} | 字符x重复至少m次 |
x\{m,n\} | 字符x重复m到n次 |
\w | 所有字母与数字,称为[a-zA-Z0-9_] |
\W | 所有字母与数字之外的字符,称为非字符[^a-zA-Z0-9_] |
\b | 词边界 |
元字符 | 功 能 |
+ | 匹配一个或多个前导字符 |
? | 匹配零个或一个前导字符 |
a|b|c | 匹配a或b或c |
() | 组字符 |
(..)(..)\1\2 | 标签匹配字符 |
x{m} | 字符x重复m次 |
x{m,} | 字符x重复至少m次 |
x{m,n} | 字符x重复m到n次 |
括号类 | 含义 |
[:alnum:] | 字母与数字两种字符 |
[:alpha:] | 字母字符 |
[:cntrl:] | 控制字符 |
[:digit:] | 数字字符 |
[:graph:] | 非空字符(不包含空格、控制字符等) |
[:lower:] | 小写字母 |
[:print:] | 与[:graph:]类似,但包含空格字符 |
[:punct:] | 标点字符 |
[:space:] | 所有的空白字符(换行符,空格符,制表符) |
[:upper:] | 大写字母 |
[:xdigit:] | 十六进制数字字符(0-9a-fA-F) |
选项 | 作用 |
-# (# 是一个用来代表整数值的符号) |
将匹配行前后#行的内容一同打印出来:也就是说,grep -2 pattern filename将导致grep打印匹配行的前两行和后两行 |
-A #, --after-context=# | 打印匹配行后面#行的内容:也就是说,匹配行及它后面指定的#行内容 |
-B #, --before-context=# | 打印匹配行前面#行的内容:也就是说,匹配行及它前面指定的#行内容 |
-C #, --context=# | 等价于-2选项。打印匹配行的前两行和后两行 |
-V, --version | 打印grep版本信息,版本信息应当包含在所有的bug报告中 |
-a,--text,--binary-files=text | 将二进制文件当作文本文件处理 |
-b,--byte-offset | 在输出的每行前显示便宜字节数 |
-c,--count | 为每行输入文件打印成功匹配的行数。-v则打印一些未匹配的行数 |
-D action,--devices=action | 如果输入文件为一个设备,如套接字或管道。则action默认从该设备读,就如同读一个普通文件一样。如果action为skip,则该设备被忽略 |
-e PATTERN,--regexp=PATTERN | 使用字面PATTERN作为模式:这对保护以-开头的模式非常有帮助 |
-f FILE, --file=FILE | 从FILE中获得模式,每行一个。空文件包含0个模式,因此什么也不能匹配 |
--help-- | 显示相关grep命令行选项及错误报告地址的帮助信息,然后退出 |
-h,--no-filename | 当搜索多个文件时,禁止输出文件名前缀 |
-i,--ignore-case | 忽略模式和输入文件的大小写区别 |
-L,--files-without-match | 仅打印所有未能匹配模式的文件名 |
-l,--files-with-matches | 仅打印所有正确匹配模式的文件名 |
-m #,--max-count-# | 如果文件是标准输入或正规文件,在找到指定数量(#)的匹配行后停止读文件 |
-n,--line-number | 在匹配成功的输出行前加上行号为前缀 |
-q, --quiet | 禁止正规输出。可用来替代-n |
-r,-R,--recursive,--directories=recurse | 对列出的目录,递归地读并处理这些目录中的所有文件;也就是指该目录下的所有目录 |
-s,--silent | 禁止显示文件不存在或文件不可读的错误信息 |
-v, --revert-match | 转换匹配性质,选择非匹配行 |
-w,--word-regexp | 仅选择包含词匹配的行。匹配词边界上包含字母、数字和下划线的字符串 |
-x,--line-regexp | 仅选择精确匹配整行的哪些匹配 |
-y | 与已废除的-i同义 |
-U,--binary | 将文件作为二进制文件处理。仅有MS-DOS和MS-Windows支持该选项 |
-u,--unix-byte-offsets | 报告UNIX风格的字节偏移。这个选项仅在同时使用-b选项的情况下才有效;仅有MS-DOS和MS-Windows支持该选项 |
-Z,--null | 在文件名的末尾放上ASCII空字符以取代换行符 |
grep '3\+' datafile |
grep '\(no\)\+' datafile |
grep 'x\{m,n\}' datafile |
grep 'S\(h\|u\)' datafile |
4.3 使用POSIX元字符
这种字符类,例如,[:alnum:]是A-Za-z0-9的另一种表达方式。为使用这种字符类,它必须使用另外一对括号进行引用以将其标识为一个正则表达式。例如,A-Za-z0-9本身并不是正则表达式,但[A-Za-z0-9]是。同样的,[:alnum:]应写作[[:alnum:]]。
4.4 固定的grep(grep -F 和fgrep)
它不能够识别任何正则表达式元字符的特殊意义。所有的字符仅能代表它们自身。如:
fgrep '[A-Z]****[0-9]' file |
4.5 使用选项
无论哪种形式的grep(egrep,fgrep) ,都可以使用选项。举个有点意思的例子:
$echo $LOGNAME |