如何只返回 grep 结果的一部分?

如何只返回 grep 结果的一部分?

目前我的脚本中有当前命令:

udevadm info /dev/nvme0n1 | grep P:

为了返回以下信息:

P: /(PCIe address)/nvme0/nvme0n1/

本质上,我不希望 nvme 命名空间成为 grep 的一部分,只有 PCIe 地址,我已经看到用 sed 完成类似的事情,但是即使在阅读之后它似乎也不是最直观的,所以如果可以的话宁愿使用 grep 。谢谢

答案1

使用sed不需要太复杂。

以下sed命令将丢弃所有不以字符串开头的行P:(第一个表达式),然后删除第一个表达式之前的所有内容/(第二个表达式),以及/nvme0/nvme0n1/修改后的行中从 到行尾的所有内容(第三个表达式)表达)。这些操作应该留下 PCIe 地址。

udevadm info /dev/nvme0n1 |
sed -e '/^P:/!d' \
    -e 's,[^/]*/,,' \
    -e 's,/nvme0/nvme0n1/.*,,'

或者,正如斯特凡指出的那样在评论中,

udevadm info -q path /dev/nvme0n1

相关内容