linux三剑客之一grep命令
1. 基本用法
grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
2. 使用举例
查找文件中含root的行
# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
或
# cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
出现root的行取出来并且显示行号
# grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
30:operator:x:11:0:operator:/root:/sbin/nologin
# grep ‘energywise’ * #在当前目录搜索带'energywise'行的文件
# grep -r ‘energywise’ * #在当前目录及其子目录下搜索'energywise'行的文件
# grep -l -r ‘energywise’ * #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件.
正则表达式:
. (小数点):代表『一定有一个任意字节』的意思;
* (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态
因为 * 代表的是『重复 0 个或多个前面的 RE 字符』的意义, 因此,『o*』代表的是:『拥有空字节或一个 o 以上的字节』,因此,『 grep -n 'o*' regular_express.txt 』将会把所有的数据都列印出来终端上!
当我们需要『至少两个 o 以上的字串』时,就需要 ooo*
[root@www ~]# grep -n 'goo*g' regular_express.txt
找空白行:
[root@www ~]# grep -n '^$' regular_express.txt
搜寻 test 或 taste 这两个单字
[root@www ~]# grep -n 't[ae]st' regular_express.txt
[] 里面不论有几个字节,他都谨代表某『一个』字节
字符类的反向选择 [^]
如果想要搜索到有 oo 的行,但不想要 oo 前面有 g,如下:
[root@www ~]# grep -n '[^g]oo' regular_express.txt
查找有数字的那一行
[root@www ~]# grep -n '[0-9]' regular_express.txt
限定连续 RE 字符范围 {}
因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。
假设我要找到两个 o 的字串:
[root@www ~]# grep -n 'o\{2\}' regular_express.txt
找出 g 后面接 2 到 5 个 o ,然后再接一个 g 的字串
[root@www ~]# grep -n 'go\{2,5\}g' regular_express.txt