如何从blkid命令输出中提取LABEL后的USB设备名称?
从blkid输出中提取USB设备标签名称的方法
先看看你提供的原始blkid输出:
$ blkid /dev/sda1: UUID="88dd2cc5-0a4f-4477-b678-159613aaf920" TYPE="ext4" /dev/sda2: UUID="ggxkwK-DZfA-DnTF-dWbn-msx6-egfo-GuGIuS" TYPE="LVM2_member" /dev/mapper/vg_baldy1-lv_root: UUID="76ab63ba-e8c4-4040-9533-5c8562f739d4" TYPE="ext4" /dev/mapper/vg_baldy1-lv_swap: UUID="462a170b-5e09-4b98-98ce-09e0a24009ab" TYPE="swap" /dev/mapper/vg_baldy1-lv_home: UUID="c38c0b9a-1049-4e9f-8800-d68d2e450929" TYPE="ext4" /dev/sdb1: LABEL="MYUSB" UUID="BF05-9FC6" TYPE="vfat"
我给你几个实用的命令行方法,帮你精准提取到USB设备的标签名称(也就是MYUSB):
方法一:grep + sed 组合(指定标签名)
如果已经知道目标标签是MYUSB,直接用这个命令就能一步到位:
blkid | grep 'LABEL="MYUSB"' | sed 's/.*LABEL="\([^"]*\)".*/\1/'
解释:
grep 'LABEL="MYUSB"':先过滤出包含目标标签的那一行sed 's/.*LABEL="\([^"]*\)".*/\1/':用正则表达式匹配,把LABEL="之前和"之后的所有内容替换为空,只留下引号里的标签名
方法二:grep + sed 组合(通用提取USB设备的标签)
如果以后需要提取任意USB设备的标签(不管名字是什么),可以用这个更通用的命令:
blkid | grep '/dev/sd[b-z][0-9]*:' | grep 'LABEL=' | sed 's/.*LABEL="\([^"]*\)".*/\1/'
解释:
grep '/dev/sd[b-z][0-9]*:':先过滤出USB设备的行(一般系统内置硬盘是/dev/sda,USB设备从/dev/sdb开始)grep 'LABEL=':再从这些行里筛选出带标签的- 最后用
sed提取标签名
方法三:用awk实现(更简洁)
awk处理这种文本提取也很方便,指定标签名的话可以用:
blkid | awk '/LABEL="MYUSB"/ {sub(/.*LABEL="/,""); sub(/".*/,""); print}'
通用提取USB标签的版本:
blkid | awk '/\/dev\/sd[b-z][0-9]*:/ && /LABEL=/ {sub(/.*LABEL="/,""); sub(/".*/,""); print}'
解释:
sub(/.*LABEL="/,""):删除从行开头到LABEL="的所有内容sub(/".*/,""):删除从第一个"到行尾的所有内容- 最后打印剩下的部分,就是我们要的标签名
以上任何一个命令执行后,都会只输出MYUSB,完全符合你的需求。
内容的提问来源于stack exchange,提问作者tiger_groove
相关产品推荐
相关产品推荐

