Bash用字符串替换输出的一部分

时间:2019-06-13 11:29:12

标签: linux bash

我有这个命令可以得到一定的输出; 命令;

uptime | sed -e 's/^[ \t]*//' > temp                    
awk '{ sub(" min","") sub("users", "user");print > "temp" }' ./temp     

当我做猫临时工时,输出变为;

13:24:16上1:33,3个用户,平均负载:0.30、0.56、0.63

我要用此命令创建的新时间替换1:33;

awk '{printf("%02d:%02d\n",($1/60/60%24),($1/60%60))}' /proc/uptime > temp2

这作为输出;

01:33

因此,总而言之,我想用第二个命令01:33的输出替换第一个命令的输出中的1:33。我一直在谷歌搜索和尝试,但是我一直失败,所以我决定来这里。我发现了sed,awk和grep的解决方案。但是我找不到解决这个问题的完美方法。

2 个答案:

答案 0 :(得分:0)

用正则表达式匹配字符串,并用sed替换。

echo '13:24:16 up 1:33, 3 user, load average: 0.30, 0.56, 0.63' | 
sed 's/up [^,]*,/up '"$(awk '{printf("%02d:%02d\n",($1/60/60%24),($1/60%60))}' /proc/uptime)"',/'

将输出(在我的系统上):

13:24:16 up 03:58, 3 user, load average: 0.30, 0.56, 0.63

答案 1 :(得分:0)

似乎您正在尝试将人类可以理解的时间转换为HH:MM:SS

uptime | awk '
  NR==1 {t = sprintf("%02d:%02d:%02d", $1/3600, $1%3600/60, $1%60); next}
        {split($0, a, "  "); print $1, $2, t, a[2], a[3]}
' /proc/uptime -
10:24:39 up 00:53:05 1 users, load average: 0.52, 0.58, 0.59