Linux技巧17. Grep命令



Grep命令用于在文件中搜索特定的文本. 是一个具有许多选项的非常强大的命令.

语法: grep [options] pattern [files]

我如何才能找到文件中匹配指定关键字的所有行?
在这个例子中, grep在/etc/passwd文件中查找包含文件John并显示所有的匹配行.

# grep John /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash

选项 -v, 显示除匹配行外的所有行. 在下面的例子中, 显示/etc/passwd文件中未匹配John的所有记录行.

注释: 在/etc/passwd中有一些行是未包含单词John. 下面仅显示输出的第一行.

# grep -v John /etc/passwd
jbourne:x:1084:1084:Jason Bourne:/home/jbourne:/bin/bash

计算特定文件中文件模式的匹配行数

在下面的例子中, 显示/etc/passwd文件里包含John文本的总行数.

# grep -c John /etc/passwd
2

你也可以通过-cv选项统计未匹配指定模式的总行数.

# grep -cv John /etc/passwd
39

查找文本忽略大小写
通过-i选项(忽略大小写), 将在搜索过程中忽略大小写.

# grep -i john /etc/passwd
jsmith:x:1082:1082:John Smith:/home/jsmith:/bin/bash
jdoe:x:1083:1083:John Doe:/home/jdoe:/bin/bash

在所有子目录中搜索匹配项
使用-r选项(递归)实现. 在下面的例子中, 在/home/users目录下的所有子目录中忽略大小写搜索文本”John”.

显示格式为”文件名: 匹配行”. 你也可以通过-l选项, 仅显示匹配的文件名.

# grep -ri john /home/users
/home/users/subdir1/letter.txt:John, Thanks for your contribution.
/home/users/name_list.txt:John Smith
/home/users/name_list.txt:John Doe
# grep -ril john /root
/home/users/subdir1/letter.txt
/home/users/name_list.txt



发表评论