`GNU不是Unix` Grep Bug?

时间:2015-02-26 11:40:01

标签: grep

(标题必须至少有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行消失了:()。

2 个答案:

答案 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«,匹配的部分。