Unix - grep нескольких ключевых слов из файла

656
user1736786

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

LOG_FILES={ "/Sandbox/logs/*" }  for file in $; 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. Я не уверен, как это сделать? Любая помощь будет принята с благодарностью.

ТКС

0

1 ответ на вопрос

0
AFH

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

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

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

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

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