Intereting Posts
Загрузочный сектор ядра Linux (vmlinuz) в x86-системе с форматом bzImage Как я могу снова получить X для автоматического определения характеристик монитора? Как узнать, какую платформу я использую в lubuntu, ubuntu или kubuntu Как я могу передать в формате webm с помощью gstreamer? Добавление нового пути в PATH «Недопустимая магия магии» на OpenWRT частная память, рассчитанная на pmap, комбинация размера виртуальной памяти и размера резидентной памяти? разница между и \ (\) в Basic Regular Expression Использование расширения параметра для создания списка аргументов для `mkdir -p` Есть ли способ написать скрипт для входа в ftp, поэтому мне не нужно вводить вещи снова и снова? CentOS 7, RAID-1 и снижение производительности с SSD Команды, вставленные в bash, не записанные в истории Grep / awk для нескольких файлов для одного вывода Просмотр заметок для определенного пакета в ArchLinux без удаления пакета? bash alias, начинающийся с pipe, не работает?

grep не работает в цикле for по списку

У меня есть некоторые файлы журналов. И у меня есть список идентификаторов пользователей. Мои файлы журналов находятся в определенном формате

log-yyyy-mm-dd eg log-2014-09-30 

Я пытаюсь выполнить поиск каждого пользователя в файле журнала. Это то, что я делаю –

 for userid in 234, 283, 893, 982, 323; do cat log-2014-09-30 | grep -a "user deleted "$userid | tail -1; done 

В идеале он должен искать каждый идентификатор пользователя в файле и печатать последнее совпадение. Затем я буду искать в log-2014-09-29 для остальных идентификаторов пользователей и так далее.

Но это только печать соответствия для последнего идентификатора пользователя.

 INFO - 2014-09-30 22:49:00 - user deleted 323 

Что я делаю не так? пожалуйста, помогите мне.

Избавьтесь от запятых в списке userid. Способ передачи списка в цикл for состоит в том, чтобы дать ему пространственные разделенные значения, а не разделенные запятой:

 for userid in 234, 283, 893, 982, 323; do echo "$userid";done 

печать

 234, 283, 893, 982, 323 

Но

 for userid in 234 283 893 982 323; do echo "$userid";done 

печать

 234 283 893 982 323 

Итак, вы должны сделать

 for userid in 234 283 893 982 323; do grep -a "user deleted $userid" log-2014-09-30 | tail -n 1 done