如何正确使用grep命令在搜索时忽略指定模式的文件?
如何正确使用grep命令在搜索时忽略指定模式的文件?
嘿,我看到你在尝试用grep搜索内容时忽略包含特定模式的文件,刚好之前我也踩过类似的坑,咱们来把这个问题捋清楚~
首先得指出你原来命令里的小问题:你定义数组的时候加了逗号,在bash里,数组元素之间不能用逗号分隔,这会导致grep_ignore数组里的元素变成了"token_a,"和"token_b",后续的grep -v就匹配不到文件名里的token_a了,所以才会出现不该出现的./file_token_a.txt结果。
正确的实现方法
先修正数组的定义方式,再执行搜索命令:
# 定义要忽略的文件名模式,注意元素之间没有逗号 grep_ignore=("token_a" "token_b") # 执行搜索:递归搜索当前目录下包含"token2"的内容,同时过滤掉包含指定模式的行 grep -rnw . -e "token2" | grep -v <(printf '%s\n' "${grep_ignore[@]}")
完整复现步骤
咱们可以用以下步骤验证这个解决方案:
- 创建测试目录并进入:
mkdir dummy && cd dummy - 创建三个测试文件:
a. 创建file_token_a.txt:
b. 创建echo "token1 token2" > file_token_a.txtfile_token_b.txt:
c. 创建echo "token1 token3" > file_token_b.txtfile_token_c.txt:echo "token2 token3" > file_token_c.txt - 执行修正后的命令:
grep_ignore=("token_a" "token_b") grep -rnw . -e "token2" | grep -v <(printf '%s\n' "${grep_ignore[@]}")
执行结果
此时你会得到符合预期的输出:
./file_token_c.txt:1:token2 token3
备注:内容来源于stack exchange,提问作者Bruno Peixoto
相关产品推荐
相关产品推荐

