하위 폴더 가 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파일 내용과 마지막으로 고유한중복된 내용은 제거됩니다. 또한 이는 디렉터리 트리의 깊이에 관계없이 작동해야 합니다.