我在 Linux 中的搜索方法遇到以下问题:我想在文件夹中的所有文件中搜索多个字符串(例如text1
、text2
和)。text3
我想找到包含这些字符串的所有行仅用一行打印每个文件的结果。
我使用了grep
andawk
但结果总是分布在多行中。有人可以帮我找到一个好的方法吗?
请注意,单个文件中的某些搜索字符串可能有多次匹配,例如两次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 命令之间使用分号而不是换行符。