Linuxの検索方法には次の問題があります。フォルダ内のすべてのファイルから複数の文字列(たとえばtext1
、および)を検索したいと思います。この文字列を含むすべての行を検索したいtext2
text3
単一行で各ファイルの結果を印刷します。。
私はgrep
andを使用しましたが、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コマンドの間に新しい行の代わりにセミコロンを使用するだけです。