在多文件中搜索多字符串并打印“一行中每个文件的结果”

在多文件中搜索多字符串并打印“一行中每个文件的结果”

我在 Linux 中的搜索方法遇到以下问题:我想在文件夹中的所有文件中搜索多个字符串(例如text1text2和)。text3我想找到包含这些字符串的所有行仅用一行打印每个文件的结果

我使用了grepandawk但结果总是分布在多行中。有人可以帮我找到一个好的方法吗?

请注意,单个文件中的某些搜索字符串可能有多次匹配,例如两次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"}'

这会将每个文件的所有结果放在一行上,每个结果(如果多个)由“%”分隔。它将搜索指定文件夹中的所有文件(但不搜索任何子文件夹)。为了便于理解,我将其放在多行中,但它可以作为一行完成 - 只需在 awk 命令之间使用分号而不是换行符。

相关内容