Linux Shell教程(二) 互动版

grep基本语法

grep 是一个很常见也很常用的指令,它最重要的功能就是进行字符串数据的比对, 然后将符合使用者需求的字符串打印出来

需要说明的是:grep 在数据中查询一个字符串时,是以 "整行" 为单位来进行数据的采集的!也就是说,假如一个文档内有 10 行,其中有2行具有你所搜寻的字符串,则将那2行显示在屏幕上,其它的就丢弃了!

grep命令的基本语法是:

$ grep [-acinv] [--color=auto] '搜寻字符串' filename
选项与参数:
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示!

范例1:将/etc/passwd,有出现 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

范例2:将/etc/passwd,有出现 root 的行取出来,同时显示这些行在/etc/passwd的行号。

$ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
30:operator:x:11:0:operator:/root:/sbin/nologin

范例3:将/etc/passwd,将没有出现 root 的行取出来。

$ grep -v root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

范例4:将/etc/passwd,将没有出现 root 和nologin的行取出来。

$ grep -v root /etc/passwd | grep -v nologin
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

在关键字的显示方面,grep 可以使用 --color=auto将关键字部分使用颜色显示。这可是个很不错的功能啊!

范例5:用 dmesg 列出核心信息,再以 grep 找出内含 eth 那行,要将捉到的关键字显色,且加上行号来表示。

$ dmesg | grep -n --color=auto 'eth0'
247:eth0: RealTek RTL8139 at 0xee846000, 00:90:cc:a6:34:84, IRQ 10
248:eth0: Identified 8139 chip type 'RTL-8139C'
294:eth0: link up, 100Mbps, full-duplex, lpa 0xC5E1
305:eth0: no IPv6 routers present

范例6:根据文件内容递归查找目录。

$ grep ‘energywise’ *           #在当前目录搜索带'energywise'行的文件
$ grep -r ‘energywise’ *        #在当前目录及其子目录下搜索'energywise'行的文件
$ grep -l -r ‘energywise’ *     #在当前目录及其子目录下搜索'energywise'行的文件,但是不显示匹配的行,只显示匹配的文件

注:这几个命令很常用,是查找文件的利器

执行范例1-6中的命令,并查看结果是否与教程一致。