구분 기호가 특정 횟수만큼 나타나는 모든 줄을 찾거나 제외하는 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의 네 번째 항목을 /자체로 바꾸고 교체 플래그 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

관련 정보