Unix - 从文件中使用 grep 查找多个关键字

Unix - 从文件中使用 grep 查找多个关键字

我有一个脚本,可以在所有日志文件中搜索关键字。它工作得很好。

LOG_FILES={ "/Sandbox/logs/*" }

for file in ${LOG_FILES[@]}; do
   grep $1 $file
done

这只适用于 1 个关键词。如果我想搜索 1 个以上的关键词,比如 4 个甚至 10 个关键词,该怎么办?

因此我会输入:

./myfile.sh 120.2.1.1 Chrome 400 POST

它会检查所有日志文件中的 IP 地址、chrome、400 和 POST 关键字。我在网上看到,他们有类似这样的内容:

egrep 'A1|A2|A3' filename

这指定它将 grep 输出为 A1 或 A2 或 A3,但如果输出为 A1 AND A2 AND A3,我想 grep 输出。我不确定该怎么做?任何帮助都将不胜感激。

谢谢

答案1

最简单的答案是使用一系列grep调用:-

grep 'A1' filename | grep 'A2' | grep 'A3'

为了处理独立数量的参数,您需要构建一个运行字符串:-

str="cat filename"
while [ $# -gt 0 ]; do a="$a|grep '$1'"; shift; done
eval "$a"

虽然我通常会避免不必要的cat调用(抱歉使用了双关语),但在这种情况下使用它大大简化了脚本。我还没有测试参数中嵌入空格的所有组合,但上述脚本似乎在简单情况下正确处理了引号。

相关内容