如何在Linux上查找包含特定文本的所有文件

时间:2019-05-19 01:26:05  来源:igfitidea点击:

如何使用命令行在Linux上搜索包含特定文本字符串的所有文件的目录树。
本教程将递归地搜索所有匹配字符串的文件。
本教程使用“grep”命令搜索文件中的字符串。
另外,还可以使用find命令搜索具有特定字符串的文件。

语法

grep -rwl “search-string” /path/to/serch/dir

Linux在所有文件中搜索单个字符串

下面的示例命令将在/var/log目录及其子目录的所有文件中搜索字符串“theitroad”。

$ grep -rlw "theitroad" /var/log 

/var/log/lfd.log
/var/log/cloud-init.log
/var/log/messages-20170226
/var/log/audit/audit.log.1
/var/log/btmp-20170315
/var/log/httpd/access_log-20170226

Linux中搜索包含多个字符串的所有文件

我们还可以使用-e开关指定要搜索的多个字符串。
这类似于 egrep命令。
下面的例子将在/var/log目录及其子目录中搜索包含字符串“theitroad”或者“https”的所有文件。

grep -rlw -e "theitroad" -e "https"  /var/log

Linux在特定文件中搜索字符串

我们可以在匹配文件名条件的文件中搜索字符串。
下面的示例命令将在在/var/log目录及其子目录中的 .log文件中搜索字符串“theitroad”。

grep -rlw --include="*.log" -e "theitroad" /var/log

在搜索时排除一些文件

如果我们想排除一些匹配文件名标准的文件。
我们可以在命令中使用 -exclude选项排除一些文件。
例如,不要搜索 .txt文件。

grep -rlw --exclude="*.txt" -e "theitroad" /var/log

在搜索中排除一些目录

你也可以排除一些目录来跳过搜索。
例如,不要在名称中含有 http的文件夹中搜索字符串文件。

grep -rlw --exclude-dir="*http*" -e "theitroad" /var/log