*.md
나는 all at 을 찾고 ${PWD}
grep 으로 시작하는 줄을 찾아 title:
절대 파일 경로 -H
와 패턴 일치의 줄 번호 와 함께 인쇄하려고 합니다. 그런 다음 결과를 -n
구분 기호가 있는 테이블 -s
에 출력하려고 합니다.:
find ${PWD} -type f -name "*.md" -exec bash -c 'i="$1"; grep -HnE "^title:" $1; | column -t -s :;' _ {} \;
이것은 grep까지 작동했지만 테이블을 만들 수 없습니다.
그리고 @steeldriver님이 제안해주신 수정사항에 따르면 결과마다 하나씩 실행이 되는거 같아서 find
테이블이 생성되지 않는건가요?
샘플 출력
/Admin/Specification/Specification.md 2 title Specification
/Admin/GraphicCard/index.md 2 title "GraphicCard"
답변1
생각이 너무 많을 수도 있습니다. 결과를 표로 작성하는 대신 , 다작의 표 작성기를 통해 결과를 표로 작성해 보는 것은 grep
어떨까요 ?awk
find . -type f -name \*.md -print0 | xargs -0 awk 'BEGIN { OFS="\t" } /^title:/ { print FILENAME, FNR, $0 }'
find
md
관심 있는 모든 파일을 찾아 인수로 awk
전달합니다 xargs
. 그런 다음 awk
일치하는 줄에 파일 이름( find
전체 상대 경로를 통해 전달됨), 파일의 레코드 번호(즉, 줄 번호)를 표시합니다. 귀하의 기준 과 파일로 모두 OFS
출력 필드 구분자에 정의된 탭으로 구분됩니다.
출력을 보다 정확하게 정렬하려면 다음을 수행할 수 있습니다.
/^title:/ { printf( "%35s %4d %s\n", FILENAME, FNR, $0 ) }
또한 원하지 않지만 find | xargs awk
원하는 경우 find -exec
에도 작동합니다.
find . -name \*.md -type f -exec awk '/expiry/ { printf( "%30s %4d %s\n", FILENAME, FNR, $0 ) }' "{}" +