Linux

bash + grep 僅輸出時間戳

  • July 15, 2019

我們想從輸出中擷取時間,而不是從命令 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 位。

引用自:https://unix.stackexchange.com/questions/530089