The command to get a public IP from UNIX `ip addr` command:
ip -4 -o addr| \
awk -F "( |/)" '$0 !~ " (10|127|172|192)\\." {print $7}'
The `ip` command options makes it to print only IPv4 addresses (`-4`) and output them in one line each (`-o`).
The `awk` app uses space and `/` as Field separators (`-F "( |/)`) and looks for lines without a substring containing one of 10, 127, 172, 192 numbers followed by a dot and preceded by space (`$0 !~ " (10|127|172|192)\\."`. It prints a seventh filed (`{print $7}`).
Example of ip command outputTo better understand the pattern used in the `awk` below is an example of the output of the `ip` command.
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever 2: enp2s0f0np0 inet 56.112.121.59/32 metric 100 scope global dynamic enp2s0f0np0\ valid_lft 64241sec preferred_lft 64241sec 4: docker0 inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0\ valid_lft forever preferred_lft forever