サブフォルダがrules/resources
あるためというフォルダがありますA
。各サブフォルダーに。B
C
constraint.yaml
これで文字列を含むファイルが欲しいですgrep
。私は次のように使用しようとしています:constraint.yaml
assetType
grep
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
あなたのもの(使用しているためgrep
GNUであるように見え、すべて非標準GNU拡張です)がPCREサポートで構築されている場合は、次のことができます。grep
-r
-I
-h
grep -rIihPo 'assetType:\s*\K.*' rules/resources/
正規表現に一致するテキストを出力するために使用した場所では、一致で非表示にする-o
内容を指定するPerlに似た正規表現にo
切り替えます。-P
\K
K
重複した項目を整列して削除するパイプですsort -u
。
答え2
ルール/リソースに応じて、以下を試してください。
fgrep -Rh assetType `find ./ -name constraint.yaml.`|uniq
存在するfgrepこれ-アル字型スイッチを使用すると、検索が再帰的に実行されます。- 時間出力でファイル名の接頭辞を抑制します。探す上の間の部分は餌を担当します。fgrepファイルの内容と最後に ユニーク重複した内容は削除されます。また、これはディレクトリツリーの深さに関係なく機能する必要があります。