У меня есть скрипт, который будет искать ключевое слово во всех файлах журнала. Это работает просто отлично.

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

Это указывает на то, что он будет отображать выходные данные, являющиеся либо А1, либо А2, либо А3, но я хотел бы получить выходные данные, если это А1, А2 и А3. Я не уверен, как это сделать? Любая помощь будет принята с благодарностью.

ТКС

1 ответ1

0

Самый простой ответ - использовать последовательность вызовов grep :

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

Чтобы обработать независимое количество параметров, вам нужно построить строку выполнения:-

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

Хотя я обычно избегаю ненужных вызовов cat (извините за каламбур), его использование в этом случае значительно упрощает сценарий. Я не проверял все комбинации со встроенными пробелами в параметрах, но приведенный выше скрипт, кажется, правильно обрабатывает цитирование в простых случаях.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .