我在目录中有一组文件。在这些文件中,很少有文件包含匹配模式 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”。这怎么可能?
答案 0 :(得分:0)
使用不带+
的简单点来完成工作:
grep 'config_dict\["backup.moduleDir"].' *.py
在所有python脚本中,这将找到config_dict["backup.moduleDir"]
后跟至少1个字符。