如何在 busybox awk 中使用多个不同的字符作为字段分隔符?

How to use multiple, different characters as field separator in busybox awk?

我想用 BusyBox 的 awk 使用多个不同的字符拆分一个字符串。例如,空格和斜线。

我看了Can field separator in awk encompass multiple characters?的回答。它声明您应该能够将 "even a regex" 作为分隔符传递。但是我找不到正确的语法:

我正在处理 ip 的输出行:

inet 192.168.2.1/24 brd 192.168.2.255 scope global eth0                                       

我想要准确的 IPv4 地址:

ip -4 addr show dev eth0 | grep inet | awk -F'[ \/]' '{print ;}'

但是没用。

以下代码将检查包含字符串 "inet" 的行。如果匹配,则第二列拆分为名为 "a" 的数组。并打印该数组的第一个元素。

ip -4 addr show dev eth0  |awk '/inet/{split(,a,"/");print a[1]}'

或者您可以尝试 grep :

ip -4 addr show dev eth0 |grep -oP 'inet\s\K.*?[^/]+'

使用正则表达式时,需要指定要匹配的字符数。我的正则表达式缺少:

ip -4 addr show dev eth0 | awk -F"[ /]+" '/inet/{print }'

正在工作。 (注意,我是 运行 awk 的 busybox 版本)

+运算符表示至少需要匹配一个字符列表

我也可以删除 grep,谢谢@PS。

使用split:

$ awk '{split(,a,"/");print a[1]}' foo
192.168.2.1