我想使用多个不同的字符将一个字符串与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;}'
但它没有用。
答案 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