grep -nr 命令查询字符串方式

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 目录下搜索所有不包含 folder1folder2 的文件,并输出包含 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,则需要使用正则表达式进行限制。

你可能感兴趣的:(脚本语言,linux,服务器,运维)