Regex STDOUT中不同位置Bash数的提取

Regex STDOUT中不同位置Bash数的提取,regex,bash,awk,sed,grep,Regex,Bash,Awk,Sed,Grep,以下是speedtest cli给出的输出:(使用测试数据编辑的个人信息) 其中,我希望输出为一行逗号分隔的ping、dl、ul: 50.00, 60.00, 10.00 我一直在研究解决方案,并提出了以下建议: speedtest-cli | sed -n "5p;7p;9p" | grep -oE "[[:digit:]]{1,}" | tr '\n' , 哪些产出: 15,00,50,00,60,00,10,00, 这接近我想要的。除此之外,包括距第五条线路的距离(15.00km)和

以下是speedtest cli给出的输出:(使用测试数据编辑的个人信息)

其中,我希望输出为一行逗号分隔的ping、dl、ul:

50.00, 60.00, 10.00
我一直在研究解决方案,并提出了以下建议:

speedtest-cli | sed -n "5p;7p;9p" | grep -oE "[[:digit:]]{1,}" | tr '\n' ,
哪些产出:

15,00,50,00,60,00,10,00,
这接近我想要的。除此之外,包括距第五条线路的距离(15.00km)和基于的拆分。也使用awk或类似的工具有更好的方法吗?

使用awk,您可以:

speedtest-cli | awk -v ORS=', ' '/^(Hosted|Download|Upload)/{print $(NF-1)}'
50.00, 60.00, 10.00,
% grep -Po '^(Hosted|Download|Upload).*:\K [^ ]+' file.txt | tr '\n' ','; echo
 50.00, 60.00, 10.00,
要使用换行符而不是尾随的
请使用:

speedtest-cli | awk -v ORS=', ' '/^(Hosted |Download:)/{print $(NF-1)}
      /^Upload:/{printf "%s%s", $(NF-1), RS}'
50.00, 60.00, 10.00

如果您的
grep
支持PCRE(
-p
),您可以执行以下操作:

speedtest-cli | awk -v ORS=', ' '/^(Hosted|Download|Upload)/{print $(NF-1)}'
50.00, 60.00, 10.00,
% grep -Po '^(Hosted|Download|Upload).*:\K [^ ]+' file.txt | tr '\n' ','; echo
 50.00, 60.00, 10.00,
因此:


使用
sed
,在任何一行提取
后的最后一个数字:
speedtest cli | sed-n/*:\([0-9]\+.[0-9]\+\)[^0-9]*/\1/p'.\tr'\n',','
。非常好。NF-1是字符串中最后一个浮点数吗?另外,是否有一种简单的方法可以将最后一个替换为\n用于附加到文件?谢谢<代码>NF-1是最后一个减去1的字段。将更新以将尾部的
替换为
\n