実際の例:Pythonファイルがあり、関数名util.py
の1つを 。関数名として使用される他のファイルがある可能性がありますが、これは関係ありません。foo
bar
foo
私のプロジェクトのすべてのPythonファイルをからに更新したいと思います。したがって、foo
次bar
のようなインポートされたファイルを検索したいと思います。
import project.path.util
または
from project.path.util import foo
次に始まるすべてのfoo
通貨:
foo(
ソリューションは空白を許可できる必要があります。それぞれを使用して検索できますが、grep
検索を組み合わせることについてはわかりません。どんなアドバイスも本当にありがとうございます。
ベストアンサー1
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'
これは以下でgrep
必要です。
- 再帰検索(
-r
) - 一致するファイルの名前を出力します(
-l
)。 -Z
LF( ) の代わりに NUL で区切る- '.py'(
--include='*.py'
) で終わるファイルのみを考慮してください。
一致するすべてのファイル(存在する場合)でsed
内部置換()を実行する必要があります。-i
xargs -r