仅显示正常运行时的正常运行时间[unix]

Ric*_*haw 3 regex sed uptime

我想从正常运行时间中减少输出

20:10  up 23 days,  3:28, 3 users, load averages: 3.84 1.06 0.64
Run Code Online (Sandbox Code Playgroud)

所以它只是显示:

23 days
Run Code Online (Sandbox Code Playgroud)

我尝试使用sed,但我不确定它是适合这项工作的工具,并且没有太多使用它的经验.

如何实现我想要的输出?

dmc*_*kee 13

考虑使用cut.

  uptime | tr "," " " | cut -f6-8 -d" "
Run Code Online (Sandbox Code Playgroud)

似乎可以在我的MacBook上运行.在这里,我也常常tr杀死一个无关的",".短期和长期运行时间的格式存在一些问题.


可能的sed解决方案:

uptime | sed 's/.*up \([^,]*\), .*/\1/'
Run Code Online (Sandbox Code Playgroud)

它不依赖于输出中出现的字符串"days" uptime.


jtb*_*des 5

uptime | sed -E 's/^.+([0-9]+ days).+$/\1/'
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 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
Run Code Online (Sandbox Code Playgroud)


小智 5

上述解决方案仅显示天数或小时数。我意识到这就是 OP 正在寻找的内容,但我也在寻找包括小时和分钟在内的内容。这会显示系统运行超过一天的天数和小时/分钟,或者仅显示系统运行不到一天的小时数:

uptime | sed 's/^.* up \+\(.\+\), \+[0-9] user.*$/\1/'
Run Code Online (Sandbox Code Playgroud)

黑带正则表达式忍者 Zach W 的道具让这个工作。

  • 对于单个用户,`uptime` 输出是“1 个用户”,因此它与上面的“用户”(复数)不匹配。将其更改为“用户”,它似乎有效。 (2认同)

sou*_*der 5

我认为这是最简单的解决方案:

uptime | awk '{print $3}'
Run Code Online (Sandbox Code Playgroud)

正常运行时间| awk'{print $ 3}'

10