「hello」を含むファイルのサブディレクトリを確認し、ディレクトリ名を返すスクリプト

「hello」を含むファイルのサブディレクトリを確認し、ディレクトリ名を返すスクリプト

ディレクトリ名をパラメータとして提供するスクリプトが必要です。スクリプトはすべてのサブディレクトリ.phpファイルを確認し、文字列 "Hello"を含むファイルが存在する場合は、ディレクトリを含む一致するファイルを一覧表示します。

ベストアンサー1

次のコマンドを使用すると、この文字列を含むすべてのファイルを見つけることができます。

$ grep -lr Hello directoryname

grep検索文字列(名前はg/re/pエディタで使用されるed「g」グローバル検索「re」正規表現、「p」は一致する行を印刷するために使用されます)。

「一致するファイルのみを一覧表示する」を意味し、通常は一致する行を含む-lファイル名を表示します(ただし、ファイルが1つだけ提供されている場合、その名前は通常隠されます)。

-r「再帰検索」を意味します。

これでファイル名が存在するため、一致するファイルを含むディレクトリの名前のみが必要になるため、ファイル名を削除する必要があります。sed(ストリームエディタ)を使ってパイプを追加するだけです。

$ grep -lr Hello directoryname | sed 's:/[^/]*$::'

sforsubstituteで、その後に一致するパターンと代替テキストが続きます。[^/]「/を除くすべての文字」を意味します。*0個以上の古いオブジェクトを表します。$「行の終わりと一致」を意味します。したがって、行末のスラッシュ以外のすべての文字はそして前のスラッシュ(一致するパターンの最初の文字)は空の文字列に置き換えられます(代替テキストが空であるため)。

検索中の文字列を含むファイルが複数ある場合は、ディレクトリが複数回表示されることがあります。この問題は、パイプラインを再拡張することで解決できます。

$ grep -lr Hello directoryname | sed 's:/[^/]*$::' | uniq

uniq連続して繰り返される行を削除し、一意の行(したがって名前)のみを残します。

おすすめ記事