find를 사용하여 파일을 찾고 awk를 사용하여 파일 내에서 검색하려면 어떻게 해야 합니까?

find를 사용하여 파일을 찾고 awk를 사용하여 파일 내에서 검색하려면 어떻게 해야 합니까?

폴더와 하위 폴더 내에서 패턴을 검색하고 싶습니다. 이를 위해 나는 grep+cut+awk+tr파이프를 사용하고 있습니다.

printf "I am so        wide alper world zorro the end\t\t\talper\n" > alper.txt
printf "zorro alper alper alper    skfjsdlkfj dslfj dslkj dslfkj sldk\n" > doo.tex
mkdir .git && printf "zorro zoo\n" > .git/test_file.tex
grep -Hrn -e "zorro" --exclude-dir='.git' --color=always -I -F . | \
    cut -c 11- | awk '$0="\033[33;35m"$0' | tr -s '[:space:]' |  ifne less -r

alper.txt:1:I am so wide alper world zorro the end        alper
doo.tex:1:zorro alper alper alper skfjsdlkfj dslfj dslkj dslfkj sldk

여기에서 검색된 패턴( zorro)은 굵은 빨간색으로 표시됩니다. 다음 순서로 표시됩니다.

<filename>:<line_number>:<matching line>

파일을 찾고 awk를 사용하여 파일 내에서 검색하려면 어떻게 해야 합니까 find?

답변1

$ find . \( -name .git -prune \) -o \( -type f -exec \
    awk -v OFS=':' '
        FNR == 1 { fname=FILENAME; sub(/^\.\//,"",fname) }
        /zorro/ { gsub(/ +/," "); gsub(/\t+/,"\t"); print "\033[33;35m" fname, FNR, $0 "\033[0m" }
    ' {} + \)
alper.txt:1:I am so wide alper world zorro the end      alper
doo.tex:1:zorro alper alper alper skfjsdlkfj dslfj dslkj dslfkj sldk

관련 정보