我们想要从输出中捕获时间,而不是从命令 sshpass 中捕获时间
预期产出
Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019
但从命令中我们得到:
sshpass -p customer pssh -H "presto01 presto02 presto03" -l root -A -i "date" | grep '[0-9][0-9]:[0-9][0-9]:[0-9][0-9]'
[1] 12:45:45 [SUCCESS] presto01
Sun Jul 14 12:45:45 UTC 2019
[2] 12:45:45 [SUCCESS] presto03
Sun Jul 14 12:45:45 UTC 2019
[3] 12:45:45 [SUCCESS] presto02
Sun Jul 14 12:45:45 UTC 2019
我们可以做的
sshpass -p customer pssh -H "presto01 presto02 presto03" -l root -A -i "date" | grep '[0-9][0-9]:[0-9][0-9]:[0-9][0-9]' | grep -v "^\["
Sun Jul 14 12:50:24 UTC 2019
Sun Jul 14 12:50:24 UTC 2019
Sun Jul 14 12:50:24 UTC 2019
但这是丑陋的方式
答案1
如果您担心其他时区,线路的时间部分可能是最稳定的。也许对月份和日期名称进行 grep 也不安全。
编辑:使模式更加精确,以不匹配 IP 地址的部分和类似内容(该模式可能在数字或冒号之前和之后不匹配)。
所以如果你尝试 grep 时间,你可以这样做:
grep "\([^[^0-9:]\|^\)[0-9]\{1,2\}\(:[0-9]\{2\}\)\{2\}\([^[^0-9:]\|$\)"
一些测试数据如上:
grep "([^[^0-9:]\|^)[0-9]{1,2}(:[0-9]{2}){2}([^[^0-9:] \|$)" << END Sun Jul 14 12:47:49 UTC 2019 一些消息,地址是 01:11:91:05 Sun Jul 14 12:47:49 UTC 2019 01:11:91:05 是地址这不是正确的时间 123:23:03 这也不是 1:3:43 也不是他的 12:33:27: 7 月 14 日星期日 12:47:49 UTC 2019 END
它输出:
Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019
Sun Jul 14 12:47:49 UTC 2019
它需要三个数字部分,:
第一个数字部分的长度可以是 1-2 位数字,另外两个数字部分的长度必须是 2 位数字。