【发布时间】:2018-06-18 19:33:41
【问题描述】:
我正在尝试使用sed 命令给它一个正则表达式来过滤掉属于给定时间戳的日志。如果日志文件存在于我的脚本执行的同一服务器中,我能够实现它。这对我有用 -
sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt`.
此命令过滤掉与给定正则表达式匹配的日志。但是,当日志文件位于远程服务器中时,就会出现复杂性。我尝试运行此命令 -
ssh dbsrd3511.uhc.com `sed -n '/2018-01-07 19/,/2018-01-07
22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt
但是会报错
ksh: 2018-01-07:not found
但是当我像这样在sed 之前添加echo 时效果很好 -
ssh dbsrd3511.uhc.com echo `sed -n '/2018-01-07 19/,/2018-01-07 22:1[4-9]/p' /var/opt/xyz/Logs/ErrorLog_2.txt`
但是 echo 连接了所有内容。输出看起来像这样 -
40:09.146 Info: Deleted 13 MB at 1037 MB/sec /var/opt/MarkLogic/Forests/Meters/00002786 2018-01-07 21:40:09.148 Info: Deleted 9 MB at 3366 MB/sec /var/opt/MarkLogic/Forests/Meters/00002785 2018-01-07 21:52:00.893 Info: Saving /var/opt/MarkLogic/Forests/Meters/00002787 2018-01-07 21:52:02.039 Info: Saved 9 MB in 1 sec at 8 MB/sec to /var/opt/MarkLogic/Forests/Meters/00002787 2018-01-07 21:52:02.062 Info: Merging 73 MB from /var/opt/MarkLogic/Forests/Meters/00002783, /var/opt/MarkLogic/Forests/Meters/00002788, and /var/opt/MarkLogic/Forests/Meters/00002787 to /var/opt/MarkLogic/Forests/Meters/0000278a, timestamp=15153829212255230 2018-01-07 21:52:11.668 Info: Merged 71 MB in 10 sec at 7 MB/sec to /var/opt/MarkLogic/Forests/Meters/0000278a 2018-01-07 21:52:14.065 Info: Deleted 52 MB at 3235 MB/sec /var/opt/MarkLogic/Forests/Meters/00002783 2018-01-07 21:52:14.088 Info: Deleted 17 MB at 721 MB/sec /var/opt/MarkLogic/Forests/Meters/00002788 2018-01-07 21:52:14.105 Info: De
我无法区分换行。有没有办法可以得到正确的结果?
好的!到目前为止,我可以运行这个命令ssh dbsrd3511.uhc.com 'sed -n "/2018-01-07 21/,/2018-01-07 22:1[4-9]/p" /var/opt/MarkLogic/Logs/ErrorLog_3.txt',但问题是这些是硬编码的值。实际上,日期和日志文件存储在变量中,所以我在执行这个命令时收到错误 - ssh dbsrd3511.uhc.com 'sed -n "$dateRange" $error_log_file_name'。它在连接到远程服务器时挂起。它不返回任何输出,只是在连接到远程服务器时挂起。
【问题讨论】: