我如何 grep 某些东西并防止该短语出现在结果中?

How do I grep something and prevent the phrase appearing in the results?

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

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

ipmitool lan print | grep "MAC Address             : "
# => MAC Address             : aa:bb:cc:dd:ee:ff

我使用 google 的尝试是通过添加 -oP\K\w+ 但由于某种原因它只得到 MAC 的前 2 位数字:

ipmitool lan print | grep -oP "MAC Address             : \K\w+"
# => aa

我知道 -o 只会显示匹配的文本,这就是 MAC 地址未显示的原因,而 -P\K 一起使用会阻止一切在显示之间,但不确定在 \w+ 之后究竟要放什么才能显示 MAC 地址的其余部分。

您可以将其与

匹配
grep -oP 'MAC Address : \K\S+' file

这里,

  • -o - 提取匹配的文本,而不是整行
  • P - 启用 PCRE 正则表达式语法
  • MAC Address : - 匹配文字文本
  • \K - 匹配重置运算符,丢弃到目前为止匹配到内存匹配缓冲区的文本
  • \S+ - 一个或多个 non-whitespace 个字符。