LINUX.ORG.RU

grep по всем переменным, начинающимся с «ok»

 


1

1

Есть список переменных примерно таких:

ok1=1.1
ok2=2.2
.
.
ok[n]=n.n

Задача отпарсить лог файл по наличию в нём значений переменных.

cat log | grep -v "$ok1\|$ok2\|$ok3\|$ok4\|$ok5"
Так работает, но приходится каждый раз дописывать очередную переменную добавляя \|$ok[n].

Подскажите, есть ли возможность перечислить все переменные пусть даже ограничиваясь 50-ой например? Если всё-таки цикл, то как в нём перечислить переменные?

Спасибо.

Решение:

Вместо переменных сделал список whitelist и сортировка стала выглядеть так

cat log | grep -v -f whitelist
Всем спасибо, решение как всегда было на поверхности )))



Последнее исправление: Dimarius (всего исправлений: 2)
Ответ на: комментарий от vodz

я не вникал, что он там грепает

А это не важно. Важно, что для grep символ «|» работает как спецсимвол «или» сам по себе в расширенном (-E) и перловом (-P) режимах. Чтобы сделать его спецсимволом в обычном режиме, его необходимо экранировать: «\|».

Тем не менее:

примера не было

cat log | grep -v "$ok1\|$ok2\|$ok3\|$ok4\|$ok5"
bormant ★★★★★
()
Последнее исправление: bormant (всего исправлений: 2)
Ответ на: комментарий от bormant

Тем не менее:

И тем не менее. Мне этот скрипт не нужен. Я его показал с схематическом виде, там в стартовом сообщении вообще были точки в значениях переменных и будет ли оно корректно искать было под вопросом. Я даже не спрашивал почему -v, ибо это как-то логика наоборот. Про экранировании | в обычном режиме — я знаю, в схематичном примере это была небрежность, которая бы всплыла при наличии примерных исходных данных, а не ТЗ через «хочу так но не так»

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.