grepを使用するか、シェルスクリプトを使用する他のオプションを使用してテキストを一覧表示したいと思います。

grepを使用するか、シェルスクリプトを使用する他のオプションを使用してテキストを一覧表示したいと思います。

サブフォルダがrules/resourcesあるためというフォルダがありますA。各サブフォルダーに。BCconstraint.yaml

これで文字列を含むファイルが欲しいですgrep。私は次のように使用しようとしています:constraint.yamlassetTypegrep

grep -rIih assetType rules/resources/

私は次のような結果を得ます。

assetType: cloudfunctions.googleapis.com/CloudFunction
assetType: cloudfunctions.googleapis.com/CloudFunction
assetType: cloudfunctions.googleapis.com/CloudFunction
assetType: cloudfunctions.googleapis.com/CloudFunction
assetType: cloudfunctions.googleapis.com/CloudFunction
assetType: bigquery.googleapis.com/Dataset
assetType: artifactregistry.googleapis.com/Repository
assetType: composer.googleapis.com/Environment
assetType: composer.googleapis.com/Environment
assetType: composer.googleapis.com/Environment
assetType: apigateway.googleapis.com/Gateway
assetType: apigateway.googleapis.com/Gateway

しかし、文字列を表示したくありませんassetType。重複した値も削除する必要があります。希望の出力は次のとおりです。

cloudfunctions.googleapis.com/CloudFunction
bigquery.googleapis.com/Dataset
artifactregistry.googleapis.com/Repository
composer.googleapis.com/Environment
apigateway.googleapis.com/Gateway

答え1

あなたのもの(使用しているためgrepGNUであるように見え、すべて非標準GNU拡張です)がPCREサポートで構築されている場合は、次のことができます。grep-r-I-h

grep -rIihPo 'assetType:\s*\K.*' rules/resources/

正規表現に一致するテキストを出力するために使用した場所では、一致で非表示にする-o内容を指定するPerlに似た正規表現にo切り替えます。-P\KK

重複した項目を整列して削除するパイプですsort -u

答え2

ルール/リソースに応じて、以下を試してください。

fgrep -Rh assetType `find ./ -name constraint.yaml.`|uniq

存在するfgrepこれ-アル字型スイッチを使用すると、検索が再帰的に実行されます。- 時間出力でファイル名の接頭辞を抑制します。探す上の間の部分は餌を担当します。fgrepファイルの内容と最後に ユニーク重複した内容は削除されます。また、これはディレクトリツリーの深さに関係なく機能する必要があります。

関連情報