grep -nr “搜索内容” 文件路径
其中:
- -n:显示行号
- -r:递归查找子目录中的文件
- “搜索内容”:要搜索的内容
- 文件路径:要搜索的文件路径,可以是单个文件或目录路径(将会递归搜索该目录下的所有文件)
示例:
查找文件 /var/log/syslog 中包含字符串 “error” 的行:
grep -n "error" /var/log/syslog
查找目录 /home/user 下所有文件中包含字符串 “hello world” 的行:
grep -nr "hello world" /home/user
查询头文件中内容
可以使用以下命令查询头文件中是否包含某个字符串:
grep -r "搜索内容" 文件夹路径 --include "*.h"
查找目录 /usr/include 中所有头文件中是否包含字符串 “stdio”:
grep -r "stdio" /usr/include --include "*.h"
查询非头文件中内容
可以使用以下命令查询不包含 .h 文件中某个字符串的文件:
grep -rL "搜索内容" 文件夹路径 --include "*.c" --include "*.cpp" --exclude "*.h"
例如:
grep -rL "stdio" /home/user/project --include "*.c" --include "*.cpp" --exclude "*.h"
只查询.c .h中abc字符串
grep -nr --include=*.{c,h} 'abc' /path/to/directory
过滤文件夹方法
可以使用 grep
命令结合 --exclude-dir
参数来过滤掉指定的文件夹。具体命令如下:
grep -r "search_pattern" /path/to/search --exclude-dir=folder1 --exclude-dir=folder2
解释一下各参数的含义:
-r
:递归搜索指定目录下的文件。"search_pattern"
:需要搜索的字符串或正则表达式。/path/to/search
:需要搜索的目录路径。--exclude-dir=folder1
:排除名为folder1
的子目录,可以排除多个子目录,例如
--exclude-dir=folder1 --exclude-dir=folder2。
执行该命令后,将会在 /path/to/search
目录下搜索所有不包含 folder1
和 folder2
的文件,并输出包含 search_pattern
的行。
需要注意的是,--exclude-dir
参数只会排除指定目录下的文件,而不会排除该目录的子目录。如果需要排除子目录,可以在子目录中再次使用 --exclude-dir
参数排除需要排除的子目录。
查询指定字符
例如:grep -nr 只查询abc,不能出现abcd这样类型的方法
可以使用正则表达式来限制 grep
命令的搜索范围,从而只查询 abc
而不查询 abcd
等包含 abc
的字符串。具体命令如下:
grep -nrw '/path/to/search' -e 'abc\b' -e 'abc[^d]'
解释一下各参数的含义:
-n
:显示行号。-r
:递归搜索指定目录下的文件。-w
:只匹配整个单词,不匹配单词的一部分。/path/to/search
:需要搜索的目录路径。-e 'abc\b'
:使用正则表达式搜索包含单词abc
的行,\b
表示单词边界。-e 'abc[^d]'
:使用正则表达式搜索包含单词abc
且后面不是d
的行,[^d]
表示不匹配字符d
。
执行该命令后,将会在 /path/to/search
目录下搜索所有包含单词 abc
且不包含 abcd
的文件,并输出包含 abc
的行号和内容。
需要注意的是,该命令只能限制 abc
与其他字符之间的关系,无法限制 abc
与其他字符在同一单词中的情况。如果需要查询 abc
但不查询 abcd
,则需要使用正则表达式进行限制。