異なる行に2つの文字列を含むファイルを見つける方法

異なる行に2つの文字列を含むファイルを見つける方法

実際の例:Pythonファイルがあり、関数名util.pyの1つを 。関数名として使用される他のファイルがある可能性がありますが、これは関係ありません。foobarfoo

私のプロジェクトのすべてのPythonファイルをからに更新したいと思います。したがって、foobarのようなインポートされたファイルを検索したいと思います。

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必要です。

  1. 再帰検索( -r)
  2. 一致するファイルの名前を出力します(-l)。
  3. -ZLF( ) の代わりに NUL で区切る
  4. '.py'( --include='*.py') で終わるファイルのみを考慮してください。

一致するすべてのファイル(存在する場合)でsed内部置換()を実行する必要があります。-ixargs -r

おすすめ記事