`GNU不是Unix的Grep Bug吗?
(标题必须至少包含15个字符。该死。) 我想为UUID(`GNU不是Unix的Grep Bug吗?,grep,Grep,(标题必须至少包含15个字符。该死。) 我想为UUID(UUID=“[^”]*”)过滤blkid的输出,我想为没有UUID的每一行获取一个空行。 我正在做: sudo blkid | grep -e '^' -e 'UUID="[^"]*"' 或 sudo blkid | grep-e'$'-e'UUID=“[^”]*”' 如果我在没有-o开关的情况下运行它,Grep就可以这样做,但是当我使用-o开关时,“^”$”的匹配项就消失了。我希望没有UUID模式的每一行都有一个空行。(=仅与^(或$)
UUID=“[^”]*”
)过滤blkid
的输出,我想为没有UUID的每一行获取一个空行。
我正在做:
sudo blkid | grep -e '^' -e 'UUID="[^"]*"'
或
sudo blkid | grep-e'$'-e'UUID=“[^”]*”'
如果我在没有-o
开关的情况下运行它,Grep就可以这样做,但是当我使用-o
开关时,“^”$”的匹配项就消失了。我希望没有UUID模式的每一行都有一个空行。(=仅与^(或$)匹配的每一行)
我期望这是错误的还是这是一个grep错误?我能用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已运行)
^这将为UUID规格上色并匹配每一行:
^这将产生:
UUID="foo"
UUID="bar"
(UUID更少的行消失了:()。如果您没有找到
grep
版本,您可以使用sed
实现您的目标
blkid | sed '/UUID=/!s/.*//'
好的,我检查了手册。它与手册一致:
-o,--only matching仅打印匹配行中匹配的(非空)部分,每个部分位于单独的输出行上。
括号中的表达式显然是这里的关键--^或$是一个«空的«,匹配的部分。你能显示
blkid
的输出吗?目前,在没有这些信息的情况下预测grep的行为看起来有点复杂。为什么要回滚修订版?有离题注释和编辑
并不能提高可读性。它不能只能用grep完成。在bash模式下使用bash/perl/script、sed或vim。在vim模式下,可以使用::g!/UUID=“[^”]*”/s/*/
在控制台模式下运行vi确定,因此我检查了手册。它与之一致:`-o,--仅匹配打印匹配的(非空)匹配行的一部分,每一部分都在单独的输出行上。`括号内的表达式显然是这里的键--^或$是一个空的匹配部分。