sed:提取并打印正则表达式匹配组

neu*_*aus 3 sed command-line

我正在尝试提取 Linux 上网络接口的 IPv4 地址。我有一个可行的解决方案:

IFACE=eth0
ip a show dev $IFACE | sed -n 's/.*inet \(.*\)\/.*/\1/p'
Run Code Online (Sandbox Code Playgroud)

作为记录,以下是该ip a show命令的示例输出:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:51:51:b4:a9:08 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.20/24 brd 10.0.2.255 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::251:56ff:fec1:4915/64 scope link 
       valid_lft forever preferred_lft forever
Run Code Online (Sandbox Code Playgroud)

虽然我的解决方案有效,但我想知道是否有一种sed 方法来获取正则表达式模式匹配组的内容并用它替换当前行(用 sed 术语来说,模式空间)或以某种方式打印它?我认为必须使用s///p该模式并将其扩展到整行(在.*开头和结尾)是一种拼凑。

use*_*686 5

解析ip以人为本的输出是一件麻烦事。使用 JSON 输出:

ip -4 -json a show dev $IFACE scope global | jq -r ".[].addr_info[].local"
Run Code Online (Sandbox Code Playgroud)