Grep представляют в виде строки со специальным символом на удаленном сервере с помощью ssh

У меня есть файл журнала на удаленном сервере Linux со следующей информацией в нем:

Mar 29 18:15:06 mailserver amavis[12049]: (12049-13) Passed CLEAN {RelayedInbound}, [111.111.111.111]:25667 [111.111.111.111] <automated_email@dell.com> -> <johndoe@domain.com>,<orders@domain.com>, Queue-ID: 7711E18023F, Message-ID: <0e1430$gvauj1@ausxipmktpc11.us.dell.com>, mail_id: GQj-5bhH37Yi, Hits: -, size: 15551, queued_as: EE75C180429, 148 ms

Я пытаюсь выполнить команду на удаленном сервере к grep идентификатор сообщения: 0e1430$gvauj1@ausxipmktpc11.us.dell.com Команда, которую я выполняю:

ssh -t root@remoteserver grep 0e1430$gvauj1@ausxipmktpc11.us.dell.com /root/log

Проблема с $ в идентификаторе сообщения. Если я grep это на удаленном сервере я могу найти идентификатор в журналах путем окружения идентификатора сообщения '0e1430$gvauj1@ausxipmktpc11.us.dell.com' но когда я пытаюсь выполнить команду через ssh, это, кажется, не работает.

6
задан 30 March 2017 в 00:33

2 ответа

Для выполнения команды grep на удаленной машине, которая содержит знак $, Вам нужно:

  • Escape использование $ \
  • Escape новое \использующий другого \

т.е. добавляющий \\ перед знаком $.

ssh -t root@remoteserver grep 0e1430\\$gvauj1@ausxipmktpc11.us.dell.com /root/log
3
ответ дан 23 November 2019 в 07:33

Заключением в кавычки и выходом по SSH является ЛАВАШ, поэтому отправьте шаблон в grep по каналу:

$ echo '0e1430$gvauj1@ausxipmktpc11.us.dell.com' | ssh localhost grep -Ff - foo
Mar 29 18:15:06 mailserver amavis[12049]: (12049-13) Passed CLEAN {RelayedInbound}, [111.111.111.111]:25667 [111.111.111.111] <automated_email@dell.com> -> <johndoe@domain.com>,<orders@domain.com>, Queue-ID: 7711E18023F, Message-ID: <0e1430$gvauj1@ausxipmktpc11.us.dell.com>, mail_id: GQj-5bhH37Yi, Hits: -, size: 15551, queued_as: EE75C180429, 148 ms

Используйте -F опция так, чтобы grep не рассматривал его как regex. -f - опция говорит grep читать шаблоны из stdin.

Или кавычка и Escape, если Вы должны:

$ ssh "grep '0e1430\$gvauj1@ausxipmktpc11.us.dell.com' bar"
Mar 29 18:15:06 mailserver amavis[12049]: (12049-13) Passed CLEAN {RelayedInbound}, [111.111.111.111]:25667 [111.111.111.111] <automated_email@dell.com> -> <johndoe@domain.com>,<orders@domain.com>, Queue-ID: 7711E18023F, Message-ID: <0e1430$gvauj1@ausxipmktpc11.us.dell.com>, mail_id: GQj-5bhH37Yi, Hits: -, size: 15551, queued_as: EE75C180429, 148 ms
6
ответ дан 23 November 2019 в 07:33

Другие вопросы по тегам:

Похожие вопросы: