see*_*nai 6 ssh command-line bash grep
我在远程 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
Run Code Online (Sandbox Code Playgroud)
我试图在远程服务器上运行一个命令来 grep 消息 ID:0e1430$gvauj1@ausxipmktpc11.us.dell.com
我正在运行的命令是:
ssh -t root@remoteserver grep 0e1430$gvauj1@ausxipmktpc11.us.dell.com /root/log
Run Code Online (Sandbox Code Playgroud)
问题在于$
消息 ID 中的 。如果我在远程服务器上 grep 它,我可以通过将消息 id 包围在日志中找到 id,'0e1430$gvauj1@ausxipmktpc11.us.dell.com'
但是当我尝试通过 ssh 运行命令时,它似乎不起作用。
通过 SSH 引用和转义是一个 PITA,因此通过管道将模式发送到 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
Run Code Online (Sandbox Code Playgroud)
使用该-F
选项,以便 grep 不会将其视为正则表达式。该-f -
选项告诉 grep 从标准输入读取模式。
如果必须,或者引用并转义:
$ 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
Run Code Online (Sandbox Code Playgroud)
为了在带有 $ 符号的远程计算机上执行 grep 命令,您需要:
\\
即在 $ 符号之前添加。
ssh -t root@remoteserver grep 0e1430\\$gvauj1@ausxipmktpc11.us.dell.com /root/log
Run Code Online (Sandbox Code Playgroud)