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

时间:2017-03-14 06:30:31

标签: awk busybox

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

我读了Can field separator in awk encompass multiple characters?的答案。它表明你应该能够通过"甚至是正则表达式#34;作为分隔符。但我无法找到正确的语法:

我正在研究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 $2;}'

但它没有用。

3 个答案:

答案 0 :(得分:2)

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

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

或者您可以尝试grep

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

答案 1 :(得分:0)

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

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

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

+ - 运算符代表至少需要匹配的一个字符列表。

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

答案 2 :(得分:0)

使用split

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