@breakerthb
2017-09-14T03:50:21.000000Z
字数 953
阅读 1633
Linux
Shell
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep [options]
参数 | 说明 |
---|---|
-c | 只输出匹配行的计数 |
-i | 不区分大小写(只适用于单字符) |
-h | 查询多文件时不显示文件名 |
-l | 查询多文件时只输出包含匹配字符的文件名 |
-n | 显示匹配行及行号 |
-s | 不显示不存在或无匹配文本的错误信息 |
-v | 显示不包含匹配文本的所有行 |
-r | 递归查找子目录 |
在grep中,最好把正则表达式用单引号括起来。
(1)正则表达式的应用
grep '[239].' data.doc #输出所有含有以2,3或9开头的,并且是两个数字的行
(2)不匹配测试
grep '^[^48]' data.doc #不匹配行首是48的行
(3)使用扩展正则表达式模式
grep -E
相当于egrep
相当于多个grep -e
如:
$ grep -E '219|216' data.doc
$ grep -e 219 -e 216 data.doc
$ egrep '219|216' data.doc
这三个命令执行的动作相同。
$ ll [pathname] | grep 'XX'
或
$ grep ‘XXX’ [pathname]
$ grep [-A][-B] 'XXX' filename
-A (after的意思)后加数字,列出后续n行
-B (befer的意思)后加数字,列出前面n行
$ grep 'test' d*
显示所有以d开头的文件中包含 test的行。
$ grep 'test' aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep '[a-z]\{5\}' [filename]
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
查找目录下的所有文件中是否含有某个字符串
$ grep "xxx" -nr .
$ find . | xargs grep -ri "IBM"
查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名
$ find . | xargs grep -ri "IBM" -l