Linux
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
但這是醜陋的方式
如果您關心其他時區,則該行的時間部分可能是最穩定的。可能那時也對月份和日期名稱進行 greping 是不安全的。
編輯:使模式更加精確,以不匹配部分 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 some message the address was 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:Sun Jul 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 位。