grep的基本使用
grep命令可以使用正则表达式来搜索文件中的特定字符串,而且需要搜索多个文件或者一类文件的时候可以模糊匹配文件名。例如使用*.py可以匹配所有.py结尾的文件。
但是grep模糊匹配文件名只能找当前目录下的文件,不能找到其子目录下的文件。例如命令grep "xxx" *.py,如果当前文件夹下有一个abc.py,子目录sub中有一个文件efg.py(相对路径是sub/efg.py)那么grep命令只会搜索abc.py中的字符串。
如果想要搜索当前文件夹及其子文件夹中的所有文件,那么有两种方法可以实现,分别为使用grep命令的-R选项和使用find命令实现。
使用grep命令的-R选项
在grep命令中,-R选项能指定grep搜索文件夹,并使用--include选项指定模糊匹配的文件名,多个文件名可以使用多个--include来实现。例如下面命令实现了搜索当前目录下所有.py和.json文件中的数字串:
1 | egrep -R --include="*.py" --include="*.json" "[[:digit:]]+" . |
使用find命令实现
find命令用于查找文件,查找的结果可以使用-exec选项传递给后续的命令,在后续命令中可以使用{}代替find的查找结果。如下命令实现与上文相同的功能:
1 | # `-type f`为指定find返回结果类型是文件; |
比较
使用grep中的-R选项似乎更直观方便一些,而且输出结果是带文件路径的,更加全面。