正确的工具,从blkid程序的输出中过滤UUID(使用grep,cut或awk等)

Tal*_*Kit 10 awk grep sed

我想过滤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"
Run Code Online (Sandbox Code Playgroud)

在某些情况下,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" 
Run Code Online (Sandbox Code Playgroud)

我想过滤掉UUID.

使用grepcut的组合可以完成

/sbin/blkid | /bin/grep 'sda1' | /bin/grep -o -E 'UUID="[a-zA-Z|0-9|\-]*' | /bin/cut -c 7-
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用awk,grepcut如下过滤U​​UID

$ /sbin/blkid | /bin/grep 'sda1' | /usr/bin/awk '{print $2}' | /bin/sed 's/\"//g' | cut -c 7-
7ec380e-2521-4fe5-bd8e-b7c02ce41601
Run Code Online (Sandbox Code Playgroud)

上述命令(使用awk)是不可靠的,因为有时在blkid程序的输出中可能存在诸如LABEL的额外字段,如上面的输出所示.

使用可靠工作的awk创建命令的最佳方法是什么?如果任何其他优雅的方法使用bin和core utils退出作业,请发布.我不想使用perl或python,因为这必须在busybox上运行.

注意: - 我正在使用busybox blkid,其中/ dev/sda1不能作为args传递(我正在使用的版本不支持它)因此grep来过滤该行.

更新: -添加了CASE 2:-output以显示无法依赖字段位置.

Van*_*uan 60

你为什么这么复杂?

试试这个:

# blkid -s UUID -o value
d7ec380e-2521-4fe5-bd8e-b7c02ce41601
fc54f19a-8ec7-418b-8eca-fbc1af34e57f
6f218da5-3ba3-4647-a44d-a7be19a64e7a
Run Code Online (Sandbox Code Playgroud)

或这个:

# blkid -s UUID -o value /dev/sda1
d7ec380e-2521-4fe5-bd8e-b7c02ce41601
Run Code Online (Sandbox Code Playgroud)

如果你没有安装正确的blkid软件包:

sudo apt-get install util-linux
sudo yum install util-linux
Run Code Online (Sandbox Code Playgroud)

  • 如果你有一个真正的 blkid 看起来很棒,但在 busybox 的 blkid 上则不然——这就是人们寻找解析解决方案的原因 (2认同)

Gur*_*uru 6

对于所有UUID,您可以执行以下操作:

$ blkid | sed -n 's/.*UUID=\"\([^\"]*\)\".*/\1/p' 
d7ec380e-2521-4fe5-bd8e-b7c02ce41601
fc54f19a-8ec7-418b-8eca-fbc1af34e57f
6f218da5-3ba3-4647-a44d-a7be19a64e7a
Run Code Online (Sandbox Code Playgroud)

说,仅针对特定的sda1:

$ blkid | sed -n '/sda1/s/.*UUID=\"\([^\"]*\)\".*/\1/p' 
d7ec380e-2521-4fe5-bd8e-b7c02ce41601
Run Code Online (Sandbox Code Playgroud)

sed命令尝试将UUID关键字后的双引号中存在的内容分组,并用标记替换整行。

  • 警告!这将在GPT上产生** INCORRECT ** UUID!在GPT上,除了UUID之外,还有PARTUUID,因此您的正则表达式将与此匹配,这通常在该行的后面。要解决此问题,请在“ UUID”之前添加一个空格。另外,要获取特定驱动器的UUID,您不需要解析它,只需使用`blkid <device>` (4认同)