grep没有扩展模式选项查找模式后面有字符的文件

时间:2017-09-19 09:37:12

标签: grep

我在目录中有一组文件。在这些文件中,很少有文件包含匹配模式 config_dict [“backup.moduleDir”] 以及跟随它们的一些字符。在少数其他文件中,模式恰好出现在行的末尾(模式后面没有字符)。请注意,该模式在所有这些文件中只出现一次。

现在,我想找到那些在匹配模式后面有一些字符的文件名。我使用以下代码:

find . -type f -name "*.py" -exec grep -El 'config_dict\["backup.moduleDir"].+$' {} \;

实际上我想避免使用正则表达式字符“ + ”和grep的扩展模式选项 -E 。所以我尝试通过以下两种方式使用 grep -v 逻辑,但它没有给我预期的结果。以下两种方法究竟出了什么问题?

grep -vl 'config_dict\["backup.moduleDir"\]$' `find . -type f -name "*.py" -exec grep -l 'backup.moduleDir' {} \;`

find . -type f -name "*.py" -exec grep -l 'backup.moduleDir' {} \; | xargs grep -vl 'config_dict["backup.moduleDir"]$'

令人惊讶的是,在上面的工作代码中,我只需要转开开方括号' [',其中转义是关闭方括号可选的']'和双引号以及点之间的字符字符串“backup”和“moduleDir”。这怎么可能?

1 个答案:

答案 0 :(得分:0)

使用不带+的简单点来完成工作:

grep 'config_dict\["backup.moduleDir"].' *.py

在所有python脚本中,这将找到config_dict["backup.moduleDir"]后跟至少1个字符。