Regex 我如何对某些内容进行grep并防止该短语出现在结果中?

Regex 我如何对某些内容进行grep并防止该短语出现在结果中?,regex,linux,grep,pcre,Regex,Linux,Grep,Pcre,我如何对某些内容进行grep并防止该短语出现在结果中 我试图从多个系统中只获取MAC地址,并且只希望结果中包含MAC地址 ipmitool lan打印| grep“MAC地址: #=>MAC地址:aa:bb:cc:dd:ee:ff 我使用google的方法是通过添加-oP和\K\w+来尝试,但出于某种原因,它只得到MAC的前两位数字: ipmitool lan打印| grep-oP“MAC地址:\K\w+” #=>aa 我知道-o只会显示匹配的文本,这就是为什么没有显示MAC地址的原因,并且

我如何对某些内容进行grep并防止该短语出现在结果中

我试图从多个系统中只获取MAC地址,并且只希望结果中包含MAC地址

ipmitool lan打印| grep“MAC地址:
#=>MAC地址:aa:bb:cc:dd:ee:ff
我使用google的方法是通过添加
-oP
\K\w+
来尝试,但出于某种原因,它只得到MAC的前两位数字:

ipmitool lan打印| grep-oP“MAC地址:\K\w+”
#=>aa
我知道
-o
只会显示匹配的文本,这就是为什么没有显示MAC地址的原因,并且
-p
\K
一起使用会阻止中间的所有内容显示,但不确定在
\w+
之后到底放什么来显示其余的MAC地址。

您可以将其与匹配

grep -oP 'MAC Address : \K\S+' file
这里,

  • -o
    -提取匹配的文本,而不是整行
  • P
    -启用PCRE正则表达式语法
  • MAC地址:
    -与文本匹配
  • \K
    -匹配重置运算符,该运算符丢弃内存匹配缓冲区中迄今为止匹配的文本
  • \S+
    -一个或多个非空白字符
您可以将其与

grep -oP 'MAC Address : \K\S+' file
这里,

  • -o
    -提取匹配的文本,而不是整行
  • P
    -启用PCRE正则表达式语法
  • MAC地址:
    -与文本匹配
  • \K
    -匹配重置运算符,该运算符丢弃内存匹配缓冲区中迄今为止匹配的文本
  • \S+
    -一个或多个非空白字符

试试
grep-oP“MAC地址:\K\S+”
非常感谢!明白了~Wiktor Stribiżew你能把它作为一个答案贴出来,这样我就可以把它标记为已回答了吗?虽然它看起来像一个答案,但它的
*
可以比一个单词走得更远,MAC地址是一个单词。这篇文章看起来很有用,对模式有了更好的解释。请尝试
grep-oP“MAC地址:\K\S+”
非常感谢!明白了~Wiktor Stribiżew你能把它作为一个答案贴出来,这样我就可以把它标记为已回答了吗?虽然它看起来像一个答案,但它的
*
可以比一个单词走得更远,MAC地址是一个单词。这篇文章看起来很有用,对模式有了更好的解释。
grep-P
是不可移植的。传统的解决方案是
sed-n/*MAC-Address://p'
或者
sed-n/*MAC-Address:\([0-9a-fA-F:*\)./\1/p'
,如果匹配后可能有不应该打印的文本。@tripleee这很好,请注意,答案是为了解决眼前的问题,而不强制OP更改所使用的工具集。我自己不需要任何选择,如果我习惯了一个特定的工具。在这种情况下,我也会将
grep
-P
一起使用,因为我是Ubuntu Linux的普通用户和NFA正则表达式的粉丝。如果OP对
sed
解决方案感兴趣,我会将其添加到答案中。当然,只是为未来的访问者发表评论。也许无论如何,这应该作为一个现有问题的副本来结束,这样答案的可移植性就有望至少得到广泛的记录。
grep-P
是不可移植的。传统的解决方案是
sed-n/*MAC-Address://p'
或者
sed-n/*MAC-Address:\([0-9a-fA-F:*\)./\1/p'
,如果匹配后可能有不应该打印的文本。@tripleee这很好,请注意,答案是为了解决眼前的问题,而不强制OP更改所使用的工具集。我自己不需要任何选择,如果我习惯了一个特定的工具。在这种情况下,我也会将
grep
-P
一起使用,因为我是Ubuntu Linux的普通用户和NFA正则表达式的粉丝。如果OP对
sed
解决方案感兴趣,我会将其添加到答案中。当然,只是为未来的访问者发表评论。也许无论如何,这应该作为一个现有问题的副本来结束,这样答案的可移植性就有望至少得到广泛的记录。