grep 命令:
grep 是一种强大的文本搜索工具, 它能使用正则表达式搜索文本, 并把匹配的行打印出来
语法:
grep [参数] 'word' [filename]
常用参数:
-n: 过滤出符合要求行的同时, 连同行号一起输出
-c: 打印符合要求的行数
-v: 打印不符合要求的行
--color: 匹配到的关键字用红色标识 (默认就有的)
-A: 后跟一个数字, 空格可有可无,-A2 表示打印符合要求的行以及下面两行
-B: 后跟一个数字,-B2 表示打印符合要求的行以及上面两行
-C: 后跟一个数字,-C2 表示打印符合要求的行以及上下各两行
-r: 把目录下面所有的文件全部遍历 了解即可
-i: 不区分大小写
-E: 能使用扩展正则表达式 (grep -E = egrep)
-q: 不显示任何信息
-w: 精准匹配符合指定字符串的行
-e: 可以匹配多个字符串
特殊符号 (.*+?|):
. 任意字符, 包括特殊字符, 下划线, 空格,
* 零个 或者 多个 * 前面的字符
.* 任意数量任意字符, 包括空行
*. 'r*.o' 匹配出 o 前面有零个或者多个任意字符的行
+ 表示 1 个或 多个 + 前面的字符 仅限 egrep
? 表示 0 个或 1 个? 前面的字符 仅限 egrep
| 表示或者 仅限 egrep
示例:
grep '[aeiou]' 1.txt 取其中任意一个进行匹配
grep '[0-9]' 1.txt 匹配任意数字
grep '[^0-9]' 1.txt 匹配包含非数字的行, 只要包含非数字的行都会显示出来
grep '^[0-9]' 1.txt 取数字开头的行
grep -v '[0-9]' 1.txt 匹配不包含数字的行
grep -v '^[0-9]' 1.txt 匹配非 0-9 开头的行
grep '^[^0-9]' 1.txt 取不以数字开头的行, 可匹配特殊符号, 不包括空行
grep '^$' 1.txt 取空行, 不包含任何字符的行 (^ 表示行首;$ 表示行尾)
grep '^[1-9][0-9]*$' 1.txt 匹配数字 1-9 开头且 0 个或多个数字结尾的
grep '[^a-zA-Z]' 匹配包含非字母的行, 并非全部都没有字母, 只要含有非字母都可以
grep -v '^#' 1.txt 去除所有以 "#" 开头的行
grep -v '^$' 1.txt |grep -v '^#' 去除所有空行和以 # 开头的行
grep -A 1 'root' 1.txt 过滤出包含 root 的行以及下面一行
grep 'o\{2\}' 1.txt 过滤包含 2 个字母 o 的行 (指定过滤字符次数)
egrep 'roo|body' 1.txt 匹配 roo 或者 匹配 body
egrep 'r(oo)|(at)o' 1.txt 用括号表示一个整体, 例子会匹配 roo 或者 ato
egrep '(oo){1,3}' 1.txt 匹配 1 到 3 次'oo'
练习:
1. 过滤出带有某个关键词的行并输出行号 (/etc/passwd)
2. 过滤不带有某个关键词的行, 并输出行号 (/etc/passwd)
3. 过滤出所有包含数字的行 (/etc/inittab)
4. 过滤出所有不包含数字的行 (/etc/inittab)
5. 把所有以 # 开头的行去除 (/etc/inittab)
6. 去除所有空行和以 # 开头的行 (/etc/inittab)
7. 过滤任意一个字符与重复字符 (/etc/passwd)
8. 指定要过滤字符出现的次数 (/etc/passwd)
grep 命令总结
来源: http://www.bubuko.com/infodetail-2489740.html