首页 > 解决方案 > 组合 grep 命令时如何不与文件名冲突?

问题描述

想象一下,你想递归地 grepstring1而不是string1_suffix。简单的方法是

grep -r string1 | grep -v string1_suffix`

但是如果文件名可以包含string1_suffix呢?

包含的string1_suffix_data.json: blabla string1行将被第二个 grep 过滤掉。

是否有可能以某种方式规避这一点?当然,在这个简单的例子中,我可以把第一部分和第二部分转过来,但是一般情况呢?

标签: grep

解决方案


如果你有 PCRE-P选项,你可以使用string1(?!_suffix)

对于一般情况,用于^(?!.*str2).*str1匹配包含str1但不包含的行str2


使用find+awk(在 上测试GNU awk,不确定其他实现)

find -type f -exec awk '/str1/ && !/str2/{print FILENAME ":" $0}' {} +

推荐阅读