用grep -oP仅显示符合正则表达式的部分, 每个一行, 特别是在一行中有多个命中的情况
我们把UUID的目标正则表达式设置为
([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}
处理前文本为
/dev/sr0: BLOCK_SIZE="2048" UUID="2023-06-17-04-46-45-00" LABEL="cidata" TYPE="iso9660"/dev/sda1: UUID="56c6249c-209a-427a-82c8-95a4cbe15687" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="11e06615-bf2f-524a-bd5d-2991360466f2"/dev/sda15: SEC_TYPE="msdos" UUID="BB09-C166" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="a09b3906-b77a-914f-9a99-46b8f182662f"/dev/sda14: PARTUUID="997dd1fe-ed57-0a4f-8c21-940577797c9a"
可以看到第1行没有符合要求的, 第2行有2个, 第3行 第4行各有1个.
如果我们用上一篇中的方法使用sed,
blkid | sed -nr 's/.*([^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}).*/\1/gp'
会发现结果只有3个.
如果我们想用尽量简单的语法来获取正则表达式的字符串的话, 可以使用 grep -oP
blkid | grep -oP '[^-]{8}-[^-]{4}-[^-]{4}-[^-]{4}-[^-]{12}'
这样会把全部符合条件的都显示出来, 一共4个, 每行1个.
评论
发表评论