一个真实的例子是:我有一个Python文件util.py,我改变了函数名从一个foo到bar。可能还有其他文件foo用作函数名,它们无关紧要。
我想从更新项目中的所有的Python文件foo来bar。所以我想对导入的文件进行搜索,例如:
import project.path.util
Run Code Online (Sandbox Code Playgroud)
或者
from project.path.util import foo
Run Code Online (Sandbox Code Playgroud)
以及对foo诸如以下内容的任何调用:
foo(
Run Code Online (Sandbox Code Playgroud)
解决方案必须是空白容忍的。我可以使用它们中的每一个进行搜索,grep但我不确定组合搜索。任何建议将不胜感激。
使用 GNU 工具:
grep -rlZ --include='*.py' -e 'import project.path.util' \
-e 'from project.path.util import.*\bfoo\b' . |
xargs -r0 sed -i 's/\bfoo\b/bar/g'
Run Code Online (Sandbox Code Playgroud)
该作品通过询问grep来
-r)-l)-Z)分隔--include='*.py')结尾的文件并要求在所有匹配文件中sed执行就地替换 ( -i),如果有 ( xargs -r)。