bash + grep 仅输出时间戳

bash + grep 仅输出时间戳

我们想要从输出中捕获时间,而不是从命令 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 位数字。

相关内容