(标题必须至少有15个字符。该死的。)
我想为UUID(blkid
)过滤UUID="[^"]*"
的输出,我想为没有UUID的每一行获取一个空行。
我正在做:
sudo blkid | grep -e '^' -e 'UUID="[^"]*"'
或 sudo blkid | grep -e' $' -e' UUID =" [^"] *"'
如果我在没有-o
开关的情况下运行它,Grep就会这样做,但是当我使用-o
开关时,匹配' ^' ' $'消失了。我期望的是每行没有UUID模式的空白行。 (=每行只匹配^(或$))。
我错了预料到这个或者这是一个grep bug吗?我可以用grep实现我的目标吗?
编辑 - 示例输入
这是我的blkid
输出。真实的故事:
/dev/sdbX: UUID="foo" TYPE="LVM2_member"
/dev/sdbY: UUID="bar" TYPE="LVM2_member"
/dev/mapper/this_wont_have_an_uuid TYPE="DM_snapshot_cow"
/dev/mapper/this_wont_have_an_uuid2 TYPE="DM_snapshot_cow"
(以下假定已经运行sudo blkid >| blkid
)
< blkid grep -e 'UUID="[^"]*"' -e '$'
^这会为UUID规范着色并匹配每一行:
< blkid grep -e 'UUID="[^"]*"' -e '$' -o
^这输出:
UUID="foo"
UUID="bar"
(UUID-less行消失了:()。
答案 0 :(得分:1)
如果找不到sed
版本
grep
实现目标
blkid | sed '/UUID=/!s/.*//'
答案 1 :(得分:0)
好的,所以我检查了手册。它与它是一致的:
-o, --only-matching Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.
带括号的表达式显然是关键 - ^或$是一个»empty«,匹配的部分。