区切り文字が特定の回数だけ表示されるすべての行を検索または除外する Grep コマンドはありますか?

区切り文字が特定の回数だけ表示されるすべての行を検索または除外する Grep コマンドはありますか?

ファイルまたはディレクトリのリストを指定された最小および最大深度レベルに制限できるUnixユーティリティはありますか?

ファイルが変更された固有のディレクトリのリストを表示するgitコマンドがありますが、git diff --name-only HEAD~3 HEAD~0 | sed 's|/[^/]*$||' | uniq出力を特定の深さに制限したいと思います。これを達成する方法はありますか?

以下はインストール例ですDrupal。モジュールをインストールまたは更新した後、gitコマンドはどのモジュールが追加または変更されたかを示します。モジュールディレクトリは4番目のレベルディレクトリであるため、より深いディレクトリは切り捨てられ、4番目のレベルディレクトリから重複エントリを削除する必要があります。

sites/all/modules/table_trash
sites/all/modules/table_trash/css
sites/all/modules/table_trash/drush
sites/all/modules/table_trash/js
sites/all/modules/table_trash/libraries
sites/all/modules/table_trash/libraries/variants/js
sites/all/modules/table_trash
sites/all/modules/video_filter
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views
sites/all/modules/views_aggregator
sites/all/modules/views_aggregator/views_aggregator_more_functions
sites/all/modules/views_php
sites/all/modules/views_php/plugins/views
sites/all/modules/views_php
sites/all/modules/views_watchdog
sites/all/modules/views_watchdog/views/handlers
sites/all/modules/views_watchdog/views/plugins
sites/all/modules/views_watchdog/views/theme
sites/all/modules/views_watchdog/views
sites/all/modules/views_watchdog

これは、N番目の区切り文字(この場合は「/」)以降のすべての行を削除するgrepコマンドを適用する一般的なケースのようです。しかし、出力から重複する項目も削除できることを探しています。これがまさにその理由です。この場合、uniqコマンドを介して渡す必要があります。この場合、最大レベルと最小レベルの数は両方とも4でなければなりません。

答え1

を使用してこれを行うことができ、プロセスからの必要性を排除できますawk。適切に設定seduniqlimit

git diff --name-only HEAD~3 HEAD~0 | 
awk -vlimit=3 -F'/' -vOFS='/' -- '--NF == limit && !x[$0]++'

答え2

diff --name-only HEAD~3 HEAD~0 | sed -ne 's|/||5;t' -e 's||/|4p' | sort -u

コマンドラインが実際にそうします。コマンドに代替コマンドを追加して、[num]パターンの発生をターゲットにすることができます。 est が正常に置き換えられ、ターゲット abel が指定されていない場合、est はスクリプトから分岐します。これは、あなたがしなければならないことは、estまたはそれ以上のスラッシュを使用して残りを印刷することだけであることを意味します。sed s///[num]t:ltts///5p

または、少なくとも最大値を超える行を処理できます。明らかに最小要件もあります。幸いなことに、次のように簡単です。

sed -ne 's|/||5;t' -e 's||/|4p'

...onの4番目の項目をそれ/自体に置き換え、置換フラグpにリントを追加するだけです。 5つ以上の一致がある行がs///削除/されたため、/一致が4つある行には4つだけが含まれます。

一意の項目では、uniq入力がedされていないと機能しないため、引き続きsort使用できますsort -u

パイプラインを実行sed ... | sortして印刷されたデータの例:

sites/all/modules/table_trash/css
sites/all/modules/table_trash/drush
sites/all/modules/table_trash/js
sites/all/modules/table_trash/libraries
sites/all/modules/views_aggregator/views
sites/all/modules/views_aggregator/views_aggregator_more_functions
sites/all/modules/views_watchdog/views

関連情報