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

관련 정보