在Linux服务器中查找包含特定文本字符串的文件
如何在Linux服务器上找到包含特定文本字符串的文件?
我必须承认,任何基于Linux或Unix的服务器上都有成千上万个文本文件。
可以使用find命令查找和定位这些文件。
不幸的是,find命令无法在文本文件内查找字符串。
您需要使用grep命令。
grep命令或egrep命令在给定的输入文件中搜索包含匹配项或文本字符串的行。
grep命令语法,用于查找包含特定文本字符串的文件
语法为:
grep "text string to search" directory-path grep [option] "text string to search" directory-path grep -r "text string to search"directory-path grep -r -H "text string to search" directory-path egrep -R "word-1|word-2" /path/to/directory egrep -w -R "word-1|word-2" directory-path
让我们看一些有关如何使用grep搜索文件中字符串的常见示例。
如何搜索和查找给定文本字符串的所有文件
在此示例中,在/home/tom /目录中的所有文本(* .txt)文件中搜索名为redeem reward的字符串,请使用:
$ grep "redeem reward" /home/tom/*.txt
或者
$ grep "redeem reward" ~/*.txt
递归搜索所有子目录
您可以使用-r选项递归搜索每个目录下所有文件的文本字符串:
$ grep -r "redeem reward" /home/tom/
或者
$ grep -R "redeem reward" /home/tom/
在Linux上查找所有包含cacheRoot文本的文件:
grep -R cacheRoot /home/Hyman/
尝试在我的Linux桌面上查找包含特定文本的所有文件
仅显示文件名
默认情况下,grep命令显示匹配的行。
您可以通过-H选项为每个匹配项打印文件名:
$ grep -H -r "redeem reward" /home/tom
输出示例:
filename.txt: redeem reward foobar.txt: redeem reward ...
要仅显示文件名,请使用cut命令,如下所示:
$ grep -H -R Hyman /etc/* | cut -d: -f1
输出示例:
filename.txt foobar.txt ...
禁止文件名
grep命令在单独的一行上显示输出,并且在多个文件的情况下,它的前面是其中找到它的文件的名称。
您可以传递-h选项来禁止在输出中包含文件名:
$ grep -h -R 'main()' ~/projects/*.c
仅显示单词
您可以使用-w选项仅选择包含构成完整单词的匹配项的行。
在此示例中,仅在~/projects /目录中搜索单词getMyData():
$ grep -w -R 'getMyData()' ~/projects/
搜索两个或多个单词
使用egrep命令,如下所示:
$ egrep -w -R 'word1|word2' ~/projects/
隐藏警告垃圾邮件
由于权限和其他问题,grep命令生成如下错误消息:
没有这样的文件或目录没有这样的设备或地址权限被拒绝
要隐藏grep命令生成的所有错误或警告消息垃圾邮件,请将2>/dev/null追加到grep命令。
这将向/dev/null设备发送并隐藏不需要的输出:
$ grep -w -R 'getMyData()' ~/projects/ 2>/dev/null
以彩色显示匹配的文本
将--color
选项传递给grep命令,以在终端上以彩色显示匹配的文本/单词:
grep --color 'word' file grep --color -R 'word' /path/to/dir grep --color -R "192.168.1.5" /etc/ grep --color -R -h "192.168.1.5" /etc/ grep --color -R -h "192.168.1.5" /etc/ 2>/dev/null
输出示例:
使用颜色的grep命令并在屏幕上隐藏警告
忽略大小写
我们的最后一个示例忽略了搜索PATTERN和输入文件中的大小写区别:
grep -i -R 'word' /path/to/dir grep -i -r 'income tax' ~/accounting/
如何在Linux上找到所有包含特定文本的文件?
语法为:
egrep 'pattern' -rnw /path/to/dir/ egrep 'word1|word2' -rnw /home/Hyman/backups/
使用grep在文件中查找文本字符串
在此示例中,搜索以任何小写或大写字母开头的行:
grep "^[a-zA-Z]" -rns ~/projects/texts/
其中:
- -r递归搜索
- -R递归读取每个目录下的所有文件。跟随所有符号链接,与
-r
grep选项不同 -n
显示每条匹配行的行号- -s抑制有关不存在或不可读文件的错误消息
- -w仅适用于单词,即仅搜索包含组成整个单词的匹配项的行
-l
找到匹配项时显示每个输入文件的名称-i
在搜索时忽略大小写