从 hdparm 输出中提取序列号

从 hdparm 输出中提取序列号

我正在尝试自动使用日志文件shred并将输出放入日志文件中。目前我正在使用手动复制序列号

hdparm -I /dev/sd? | grep 'Serial\ Number'

我知道有一种方法可以grep只给我数字,而不是前面的“序列号”文本,但我不知道如何。有人知道reg表达式可以帮助我吗?

答案1

尝试awk代替grep

hdparm -I /dev/sd? | awk '/Serial Number/ { print $3 }'

或指定分隔符而不是接受默认的空格

hdparm -I /dev/sd? | awk -F':' '/Serial Number/ { print $2 }'

答案2

由于 xkcd 条提到了 perl,让我们有一个 perl 解决方案:

hdparm -I /dev/sd? | perl -nle '/Serial Number:\s+(.+)$/ && print $1'

awk其他答案中的解决方案的 perl 版本:

hdparm -I /dev/sd? | perl -anle '/Serial Number:/ && print $F[2]'

答案3

尝试

hdparm -I /dev/sd? | grep -oP 'Serial Number:\s*\K.*'

这使用积极的后视在我们需要的字符串之前忽略模式..在这种情况下Serial Number:\s*

答案4

sed?

hdparm -I /dev/sd? | sed -n 's/^.*Serial\ Number:  *\(.*\)$/\1/p'

(可能有很多其他方法可以使用 sed 来执行此操作 - 这只是我喜欢的一种方法:抑制默认打印;匹配行的所需部分;用它替换整行;然后将其打印出来。)

相关内容