如何在Bash中用grep+正则处理hdparm输出得到指定格式测速结果
实现方案
以下两种方案都可以直接得到你需要的格式化输出:
方案1:单awk命令实现(更简洁高效,推荐)
不需要额外管道拼接grep,单条awk即可完成字段提取和格式化输出:
sudo hdparm -tT /dev/xvda1 | awk '/^\/dev\// {dev=$0} /cached reads/ {cache=$11} /buffered disk reads/ {buf=$11} END {printf "%s %s MB/sec, %s MB/sec\n", dev, cache, buf}'
逻辑说明:
- 匹配以
/dev/开头的行,存储为设备名变量dev - 匹配缓存读取结果行,提取第11个字段(即等号后的数值)存为
cache - 匹配缓冲磁盘读取结果行,提取对应数值存为
buf - 最终按要求的格式拼接输出
方案2:基于现有grep逻辑改造
如果要沿用你已经写好的正则提取逻辑,可以用数组存储提取结果后拼接输出:
# 先定义目标分区 TARGET_DEV="/dev/xvda1" # 提取两个数值存入数组 SPEED_VALS=($(sudo hdparm -tT "$TARGET_DEV" | grep -Po '.* = \K[0-9.]+')) # 格式化输出 echo "$TARGET_DEV: ${SPEED_VALS[0]} MB/sec, ${SPEED_VALS[1]} MB/sec"
注意:这里优化了你原来的正则,把.* \K改为.* = \K,避免误匹配到行内其他数字,提取结果更稳定
两种方案的输出结果都为:/dev/xvda1: 6320.55 MB/sec, 197.12 MB/sec
内容的提问来源于stack exchange,提问作者Luca Sepe
相关产品推荐
相关产品推荐

