複数のファイルから複数の文字列を検索し、「1行に各ファイルの結果」を印刷します。

複数のファイルから複数の文字列を検索し、「1行に各ファイルの結果」を印刷します。

Linuxの検索方法には次の問題があります。フォルダ内のすべてのファイルから複数の文字列(たとえばtext1、および)を検索したいと思います。この文字列を含むすべての行を検索したいtext2text3単一行で各ファイルの結果を印刷します。

私はgrepandを使用しましたが、awk結果は常に複数の行にわたって分散されています。誰かが私が良い方法を見つけるのを助けることができますか?

単一ファイルの一部の検索文字列には、2回など、複数の一致があり、text3出力に必要です。

答え1

この試み:

grep -Er "string 1|string 2|string 3" /folder|\
awk '{COLON1=index($0,":")
      FILE=substr($0,1,COLON1)
      if (FILE!=PREVFILE) { printf "\n"FILE": "} else printf " % "
      printf "%s",substr($0,COLON1+1)
      PREVFILE=FILE
     }
     END {print "\n"}'

これにより、各ファイルのすべての結果が1行に表示され、各結果(複数の場合)は「%」で区切られます。指定したフォルダ(サブフォルダを除く)のすべてのファイルを検索します。わかりやすくするために複数行に表示しましたが、1行で書くこともできます。 awkコマンドの間に新しい行の代わりにセミコロンを使用するだけです。

関連情報