我想过滤 blkid 的输出以获取 UUID。
blkid 的输出看起来像
情况1:-
$ blkid
/dev/sda2: LABEL="A" UUID="4CC9-0015"
/dev/sda3: LABEL="B" UUID="70CF-169F"
/dev/sda1: LABEL=" NTFS_partition" UUID="3830C24D30C21234"
在某些情况下, blkid 的输出看起来像
案例2:-
$ blkid
/dev/sda1: UUID="d7ec380e-2521-4fe5-bd8e-b7c02ce41601" TYPE="ext4"
/dev/sda2: UUID="fc54f19a-8ec7-418b-8eca-fbc1af34e57f" TYPE="ext4"
/dev/sda3: UUID="6f218da5-3ba3-4647-a44d-a7be19a64e7a" TYPE="swap"
我想过滤掉UUID。
使用grep和cut的组合可以完成
/sbin/blkid | /bin/grep 'sda1' | /bin/grep -o -E 'UUID="[a-zA-Z|0-9|\-]*' | /bin/cut -c 7-
我尝试使用awk、grep和cut如下过滤 UUID
$ /sbin/blkid | /bin/grep 'sda1' | /usr/bin/awk '{print $2}' | /bin/sed 's/\"//g' | cut -c 7-
7ec380e-2521-4fe5-bd8e-b7c02ce41601
上面的命令(使用 awk)不可靠,因为有时blkid程序的输出中可能会出现一个额外的字段,例如 LABEL,如上面的输出所示。
使用awk创建命令可靠的最佳方法是什么?如果使用 bin 和 core utils 退出作业,请发布任何其他优雅的方法。我不想使用 perl 或 python,因为这必须在busybox上运行。
注意:-我正在使用/dev/sda1不能作为 args 传递的busybox blkid (我使用的版本不支持它),因此 grep 过滤该行。
更新:-添加了案例 2:-输出以显示不能依赖字段位置。