今天遇到一个需求,需要获取系统根目录的uuid,并输出到文件里。已知键入命令blkid可以得到结果,但是怎样从一堆输出中获取到我们需要的那一小段字符串就成了问题,在大佬的帮助下,最终使用awk命令解决了难题,记录下。
用到两个知识点.
| 符号,表示把前一条命令的输出作为输入传递给下一条命令。
awk命令,格式化处理文本命令,可以在一长串字符中截取我们想要的部分。
直接blkid输出如下:
$ blkid
/dev/sdb1: UUID="QGdzlo-olIz-30A5-57VC-Viud-OLMV-PJUrtd" TYPE="LVM2_member" PARTUUID="f6131a6e-01"
/dev/sdb2: UUID="3dLviw-M1wy-bRKo-5ZPn-4X0y-q3cH-eIhqW6" TYPE="LVM2_member" PARTUUID="f6131a6e-02"
/dev/sda1: UUID="ae5eb58c-c95c-4919-90ae-0d67b2ac7fe6" TYPE="ext2" PARTUUID="d0321fcc-01"
/dev/sda5: UUID="qDDpxc-0VUk-Z263-TEVk-NSC2-tyWU-wdffdN" TYPE="LVM2_member" PARTUUID="d0321fcc-05"
/dev/sr0: UUID="2018-02-28-18-36-04-00" LABEL="Ubuntu-Server 16.04.4 LTS amd64" TYPE="iso9660" PTUUID="3ad1a804" PTTYPE="dos"
/dev/mapper/ubuntuFrice--vg-root: UUID="14295477-ec39-4e20-b262-3f2245f0aa2c" TYPE="ext4"
/dev/mapper/ubuntuFrice--vg-swap_1: UUID="4a6587a7-461c-4d1e-b5a0-7ba2a4c49889" TYPE="swap"
使用命令blkid | grep "/dev/sda1" 后输出如下:
$ blkid | grep "/dev/sda1"
/dev/sda1: UUID="ae5eb58c-c95c-4919-90ae-0d67b2ac7fe6" TYPE="ext2" PARTUUID="d0321fcc-01"
这时候使用awk -F " " '{print $2}',意思是指定空格为分隔符,截取出第二个片段
$ blkid | grep "/dev/sda1" | awk -F " " '{print $2}'
UUID="ae5eb58c-c95c-4919-90ae-0d67b2ac7fe6"
继续使用awk -F "=" '{print $2}',意思是指定等于号为分隔符,截取出第二个片段,至此就完成了对uuid的截取,完整命令如下:
$ blkid | grep "/dev/sda1" | awk -F " " '{print $2}' | awk -F "=" '{print $2}'
"ae5eb58c-c95c-4919-90ae-0d67b2ac7fe6"