grep с переменной

Я пытаюсь создать сценарий для мониторинга всех логинов с использованием sudo, как успеха, так и неудачи.

Прямо сейчас, у меня есть:

set tdate = $(date "+%b %d") set attempted_su_log = /var/log/suattempts cat /var/log/secure | grep $tdate | grep 'servername su' >> $attempted_su_log 

Как я могу grep текущую дату из / var / log / secure, так что я получаю записи только с того дня, когда они произошли?

Когда я бегу

 cat /var/log/secure | grep 'Mar 18' | grep 'servername su' 

из командной строки, я получаю результаты, которые мне нужны, но я не уверен, как написать скрипт grep с текущей датой, заданной как переменная $ tdate.

  • Установка пароля root и sudo -i
  • Как безопасно передавать переменные в сценарии с поддержкой root?
  • Использовать sudo для упрощения rsync?
  • Как интерпретировать строку в sudoers
  • Выполнять браузер как root
  • Как sudo решает, является ли команда только исполняемой sudoers со всеми правами?
  • rsnapshot LVM без корня
  • Выполнение команды псевдонима в качестве другого пользователя
  • 2 Solutions collect form web for “grep с переменной”

    Вы должны grep "$tdate" аргумент grep: grep "$tdate" . Это связано с тем, что $tdate расширяется до двух разделенных $tdate слов, которые, в свою очередь, передаются в grep как два аргумента, если только двойные кавычки не добавляются.

    Ваш скрипт можно было бы улучшить, чтобы удалить бесполезное использование cat и вызвать grep только один раз:

     </var/log/secure grep "$tdate.*servername su" >>"$attempted_su_log" 

    tdate есть пространство. Таким образом, grep обрабатывает вторую часть tdate как имя файла. Вам нужно будет заключить $tdate в двойные кавычки, чтобы предотвратить это. Ваша команда должна выглядеть так:

     cat /var/log/secure | grep "$tdate" | grep 'servername su' >> $attempted_su_log 
    Linux и Unix - лучшая ОС в мире.