我正在尝试自动使用日志文件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 来执行此操作 - 这只是我喜欢的一种方法:抑制默认打印;匹配行的所需部分;用它替换整行;然后将其打印出来。)