Regex STDOUT中不同位置Bash数的提取
以下是speedtest cli给出的输出:(使用测试数据编辑的个人信息) 其中,我希望输出为一行逗号分隔的ping、dl、ul: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)和
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