我想从正常运行时间中减少输出
20:10 up 23 days, 3:28, 3 users, load averages: 3.84 1.06 0.64
所以它只是显示:
23 days
我尝试过使用sed,但我不确定它是否适合这项工作,并且没有太多使用它的经验。
如何实现我想要的输出?
答案 0 :(得分:13)
考虑使用cut
。
uptime | tr "," " " | cut -f6-8 -d" "
似乎适用于我的MacBook。在这里,我还使用tr
来杀死一个无关的“,”。短期和长期运行时间的格式存在一些问题。
可能的解决方案:
uptime | sed 's/.*up \([^,]*\), .*/\1/'
不依赖于uptime
输出中出现的字符串“days”。
答案 1 :(得分:5)
uptime | sed -E 's/^.+([0-9]+ days).+$/\1/'
答案 2 :(得分:5)
你可以在没有任何外部工具的情况下使用shell
$ var="20:10 up 23 days, 3:28, 3 users, load averages: 3.84 1.06 0.64"
$ var=${var/#*up}
$ echo ${var%%,*}
23 days
答案 3 :(得分:5)
我认为这是最简单的解决方案:
uptime | awk '{print $3}'
正常运行时间| awk' {print $ 3}'
10
答案 4 :(得分:4)
以上解决方案仅显示日期或小时。我意识到OP正在寻找的东西,但我也在寻找包括小时和分钟的东西。这会显示系统开启超过一天的天数和小时/分钟,或仅显示不到一天的小时数:
uptime | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/'
支持黑带正则表达忍者Zach W让这个工作。
答案 5 :(得分:2)
uptime=$(</proc/uptime) ; uptime=${uptime%%.*} ; days=$(( uptime/60/60/24 )); echo $days days
答案 6 :(得分:0)
echo $PATH
如果自上次重启后有n天,则会打印n天。如果正常运行时间少于一天,它将以hh:mm打印一段时间。
uptime | cut -d',' -f 1 | cut -d 'p' -f 2-
答案 7 :(得分:0)
以上答案是正确的,但如果您有任何人想使用awk,请使用:
uptime | awk '{ print $3,$4 }'
结果:
15 days,
答案 8 :(得分:0)
uptime
的输出通常为“ x天,y分钟”或“ x天,y:z”-但是有时候,如果正常运行时间少于一天,小时/分钟作为第一个基于时间的输出,并且不会影响天数。其余输出在列数方面非常一致。因此,我个人一直使用sed删除最后四列:
$ uptime | sed -e 's/^ [^ ]* up \(.*\)\(,[^,]*\)\{4\}$/\1/'
31 days, 35 min
或者,如果您只想要最重要的数据,则可以使用其他人提到的类似方法,即仅获取第一位数据。在不到一天的时间内,这将导致<y> min
或<y>:<z>
。超过一天,它将产生<x> days
。
$ uptime | sed -e 's/^ [^ ]* up \([^,]*\).*/\1/'
31 days
最后,如果要在少于24小时的时间内反映零,还可以选择使用/proc/uptime
或shell表达式在bc
上使用一些数学运算:
$ uptime
13:58:41 up 31 days, 55 min, 9 users, load average: 0.80, 0.89, 0.81
$ echo $(( $(awk -F . '{print $1}' /proc/uptime) / 86400)) days
31 days
$ uptime
13:59:01 up 21:18, 1 user, load average: 0.00, 0.00, 0.00
$ echo $(( $(awk -F . '{print $1}' /proc/uptime) / 86400)) days
0 days
答案 9 :(得分:0)
这对我有用:
$ uptime | grep -o "[0-9]* days"
70 days