您几乎拥有它,只是带有awk 的substr 或gsub 函数
$ uptime | awk '{print substr($3,1,length($3)-1)}'
2:49
$ uptime | awk '{sub(/,/,"");print $3}'
2:49
不需要过多的管道或不正确地使用反引号。
在uptime 使用 (GNU) grep -Po "\d{1,2}:\d{2}(?=,)" 的不同输出的情况下,提供了更好但更强大的解决方案:
# More than one day
$ uptime
12:46:18 up 92 days, 5:00, 2 users, load average: 0.00, 0.01, 0.05
$ uptime | grep -Po "\d{1,2}:\d{2}(?=,)"
5:00
# Less than one day
$ uptime
12:47:30 up 4:24, 7 users, load average: 0.34, 0.12, 0.07
$ uptime | grep -Po "\d{1,2}:\d{2}(?=,)"
4:24
或者sed -rn 's/.*([0-9]{1,2}:[0-9]{2}),.*/\1/p:
# More than one day
$ uptime
12:54:00 up 92 days, 5:07, 2 users, load average: 0.03, 0.02, 0.05
$ uptime | sed -rn 's/.*([0-9]{1,2}:[0-9]{2}),.*/\1/p'
5:07
# Less than one day
$ uptime
12:54:55 up 4:31, 7 users, load average: 0.07, 0.10, 0.08
$ uptime | sed -rn 's/.*([0-9]{1,2}:[0-9]{2}),.*/\1/p'
4:31
更新:所以如果uptime 不到一个小时,输出是否又不同了!?
$ uptime
14:46:03 up 3 min, 4 users, load average: 0.54, 0.75, 0.36
$ uptime
14:53:40 up 11 min, 4 users, load average: 0.48, 0.62, 0.46
一个regexp 来统治他们:
$ sed -rn 's/.*up\s+(.*),\s+[0-9]+ users.*/\1/p' file
92 days, 5:00
4:24
11 min
3 min
我假设这也能处理好几年!