如何在 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
我想用 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