Grepを使用してpythonファイル内のいくつかのコードスニペットを見つけようとしましたが、それらはいくつかのディレクトリ/サブディレクトリに分散していますが、残念ながら私の試みは失敗しました:(
私は思った:
grep -r "search-pattern" *.py
魔法をするはずですが、検索パターンの行を含むファイルがいくつかありますが、「一致が見つかりません」で失敗しました。
次に、私は次を試しました:
grep -r "search-pattern" .
これは機能しているように見えましたが、いくつかのコンパイルされたCファイルやその他のものに対して多くのエラーを返しました。明らかに私が欲しかった以上。
最終的に、Googleで何度も検索した後、私は思いついた:
grep -rn --include="*.py" "search-pattern"
これは仕事をして、私が探していたすべてのpythonファイルを見つけました。ボーナスとして、検索パターンを含む行番号も出力します。
しかし、1つの問題が残っていました。いくつかの「許可が拒否されました」エラーです。どうすればそれらを取り除くことができますか? grepの処理は簡単だと思っていましたが、行番号を付けてエラーなくすてきな結果を得るのは複雑でした。
どんな助けも大歓迎です:)
ユーザーに読み取り権限がないpythonファイルがいくつかあるため、これらのPermission denied
エラーが発生しているため、grepはnotこれらのファイルを処理しています(検索できません)。
Permission denied
エラーを「取り除いて」ください。
次のように、コマンドの最後に2>/dev/null
を追加できます。
grep -rn --include="*.py" "search-pattern" 2>/dev/null
これにより、すべてのエラーメッセージが抑制されるため、Permission denied
エラーがポップアップ表示されることはありません。しかし、これは明らかにgrepがそれらのファイルを検索していないことを意味しているため、検索パターンが含まれている場合、出力には表示されません。
説明:
Linuxでは、 ファイル記述子と呼ばれるものが3つあります :stdin
、stdout
、stderr
。コマンドを実行してエラーが発生した場合、エラーはファイル記述子stderr
に書き込まれます。デフォルトでは、stderr
は端末にエラーを出力します。したがって、できることは、エラーをリダイレクトすることです。つまり、端末ではなくstderr
を別の場所にリダイレクトします。 Linuxでは、>
記号を使用してものをリダイレクトします。それでは、stderr
をどこにリダイレクトしますか?/dev/null
へ。/dev/null
は特別なファイルです。ブラックホールと考えてください。リダイレクトするものはすべて破棄されます。最後に、stderr
を単に番号2
と呼びます。2>/dev/null
は、2
を/dev/null
にリダイレクトするようLinuxに指示します。1
はstdout
(コマンドの通常の出力、つまりエラーではない)を意味します。そのため、たとえば、grepコマンドの実際の出力を端末に表示するのではなくファイルに保存する場合、1>/path/to/filename
を使用して、stdout
をそのファイルにリダイレクトできます。
特権があると仮定して、コマンドでSudo
を使用します。
Sudo grep -rn --include="*.py" "search-pattern"
ユーザー名にroot権限がある場合(つまり、マシンの管理者である場合)、コマンドを実行する前にSudo
を使用してrootユーザーとして実行するため、Permission denied
エラーとgrepwillは、それらのファイルを検索し、その中に見つかった場合は検索パターンを出力します。
これはよくある問題です。コマンドラインから直接解決できます。--devices=skip
を使用して、特殊なデバイスファイル(多くのシステムでエラーや無限ループの原因)を無視できます。Sudo chown -R new_owner_name file_pattern
を実行して、ファイルの所有権を再帰的に変更し、許可エラーを回避します。COMMAND 2> DESTINATION_OR_/dev/null
を使用してエラーストリームをリダイレクトすると、エラーが引き続き発生し、grepから目的の結果が得られません。
可能であれば、Sudo
を自動的に使用しないでください分析を行う(システムの弱点になる可能性があります)場合、必要に応じてファイルの所有権を変更してください。ユーザーに許可を求める必要がある場合は、Sudoのグラフィカルバージョンを使用できます。
さらに固有の質問がある場合は、ここでコメントしてください。助けが必要な場合は、左の上矢印を押すことを忘れないでください。
ごきげんよう。