I've been trying to just return the inet values from UP adapters in ip addr,
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp0s7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:19:21:f5:04:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global enp0s7
valid_lft forever preferred_lft forever
inet6 fe80::4672:94c8:d31b:a04a/64 scope link
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 52:54:00:29:38:4d brd ff:ff:ff:ff:ff:ff
I have this regex to find that, but it returns the whole line, as is expected with grep:
([0-9]+:.{1,}state UP.{1,}(\n.{1,}?){1,}inet )\K([0-9]{1,3}\.?){4}
returns this:
inet 192.168.1.100/24 brd 192.168.1.255 scope global enp0s7
What I want it to do is just return 192.168.1.100 (the IP after inet). Can grep do this somehow, and if not, what is the correct way of going about this?
EDIT: OK, here's the relevant part of the script:
NUMOFNETWORKADAPTERS="$(ip addr | grep -Pc '[0-9]{1}: ')"
IPOFACTIVEADAPTER="$(ip addr | grep -Pc '(?<=state UP(.+\n){2,$NUMOFNETWORKADAPTER}? inet )[^/]{1,15}')"
echo "LOCAL IP: $IPOFACTIVEADAPTER"
But this gives a lookbehind assertion is not fixed length error.
greporperlor what? Probably notbash? Also, I think you could use.+instead of.{1,}.lookbehind assertion is not fixed length. I don't think that variable is expanded either, since it's in single quotes.pcregrep -o 'inet \K[\d.]+'