Com ferramentas 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'
Isso funciona perguntando grep
a
- pesquisar recursivamente (
-r
) - exibindo nomes de arquivos correspondentes (
-l
) - separados por NUL em vez de LF (
-Z
) - considerando apenas os arquivos que terminam em '.py' (
--include='*.py'
)
e pedindo a sed
para realizar a substituição no local ( -i
) em todos os arquivos correspondentes, se houver algum ( xargs -r
).