我有一个脚本,可以在所有日志文件中搜索关键字。它工作得很好。
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
调用(抱歉使用了双关语),但在这种情况下使用它大大简化了脚本。我还没有测试参数中嵌入空格的所有组合,但上述脚本似乎在简单情况下正确处理了引号。