Tuesday, February 24, 2009

017 grep 命令的使用

Linux中grep命令用于从文件中查找一个特定的文本。这个功能强大的命令有多个选项:
Syntax: grep [options] pattern [files]

如何查找文件中有多少行包含指定的关键字
在下面的例子中grep命令将查找/etc/password 文件中所有包含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/passwod文件中所有不包含John字符串的行。注意,在这个文件中有很多行都不匹配这个文本我们这里只显示了第一行:
# grep -v John /etc/passwd

jbourne:x:1084:1084:Jason Bourne:/home/jbourne:/bin/bash
查找文件中有多少行匹配某个特定的文本
下面的例子中将显示/etc/password文件中匹配文本John的行数:

# grep -c John /etc/passwd
2

你也可以通过设置-cv来查找文本中不匹配某个特定字符串的行数:
# grep -cv John /etc/passwd
39

如何在查找文本时忽略文本内容的大小写
给grep命令加上-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(recursive递归的意思)来实现。下面的例子中将查找/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

No comments:

Post a Comment