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

関連情報