xargs 파이프 입력을 사용하여 Printf 형식의 출력

xargs 파이프 입력을 사용하여 Printf 형식의 출력

내 코드베이스에서 문자열이 나타나는지 검색한 다음 파일 이름, 줄 번호 및 코드 슬라이드로 형식화된 출력을 얻고 싶습니다. 출력의 첫 번째 줄에서는 원하는 결과를 얻었지만 다음 줄에서는 원하는 형식이 손실됩니다.

$ find src/ -name "*.js" | xargs grep --null -E -n 'filter\(|map\(' | xargs -0 printf "%-100s%-5s%-100s" > test.txt

출력은 다음과 같습니다. (전체 줄을 보려면 오른쪽으로 스크롤하세요)

src/components/AppRouterSwitch.js                                                                   15:    return _Routes.map((route, index) => {
src/components/forms/UserEditForm/UserEditForm.js36:    const options = UserTypes.map((type, index) => <option key={index} value={type.type}>{type.name}</option>);
src/components/pages/AdminPage/SolutionManagementEditPage/SolutionManagementEditPage.js119:        templates:state.templates.filter(item=>item.SOLUTIONID ==id)
src/components/pages/AdminPage/SolutionManagementEditPage/SolutionManagementEditPage.js120:            .map(item=>{return{

첫 번째 줄은 내가 원하는 것과 같습니다. 다음 콘텐츠에는 필수 형식이 누락되었습니다. printf 형식 문자열을 종료해도 /n문제가 해결되지 않습니다.

답변1

find src/ -type f -name '*.js' -exec grep -Hn -E -- 'filter\(|map\(' {} + |
    awk -F: '{printf "%-100s%-5s%-100s\n", $1, $2, substr($0, length($1) + length($2) + 3)}'

옵션을 사용하면 단일 파일을 인수로 호출하는 경우에도 파일 이름을 인쇄하게 됩니다 -H. 깨진 링크와 이름이 지정된 디렉터리를 건너뛰려면 찾기 옵션을 사용하세요 .grep-type f*.js

또는 더 간단하게 grep을 완전히 제거하십시오(제안을 주신 @don_crissti에게 감사드립니다).

find src/ -type f -name '*.js' -exec awk '/filter\(|map\(/{printf "%-100s%-5s%-100s\n", FILENAME, FNR, $0}' {} +

답변2

man조금 불분명합니다. "첫 번째 일치 시 검색이 중지됩니다." - 모든 파일 이름이 인쇄되지만 일치하는 단어 검색이 처음 발생 시 중지됨을 의미합니다. GNU grep 사람들이 페이지에서는 다음과 같이 명확히 설명합니다.

-l
--files-with-matches
Suppress normal output; instead print the name of each input file from which output would normally have been printed. The scanning of each file stops on the first match. (-l is specified by POSIX.)

예는 다음과 같습니다.

$grep -iR Intel * 
2018/jan/cpu.txt:Intel i9 
2018/motherboard.txt:Intel Motherboard 
hardware.txt:Intel Corei7
#the same result as you provided;

$grep -iRl Intel * 
2018/jan/cpu.txt
2018/motherboard.txt
hardware.txt
#the desired result

관련 정보