AWKing 或 GREPing 括号 [ ]?

AWKing or GREPing brackets [ ]?

找遍了也没找到解决方法。

我将如何 awk 或 grep 以下内容:

$ mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration
[/dev/cdc-wdm0] IPv4 configuration available: 'address, gateway, dns'
 IP [0]: '11.22.333.44/55'
Gateway: '14.13.198.4'
DNS [0]: '172.17.1.101'
DNS [1]: '172.17.1.102'
DNS [2]: '172.17.1.101'
DNS [3]: '172.17.1.102'

所以我最终得到:

11.22.33.44/55

我尝试了多种不同的 grep 和 awk 组合,但找不到解决方案。

像这样:

grep '[0-9]' file_with_text | awk '{print $NF}

grep [0-9] 仅包含数字的行并将输出通过管道传输到 awk。 $NF 将 return 最后一个元素。 如果您只想要包含 / 的行,只需将其添加到 grep [0-9]/.

此外,为了获得完整的答案,您可以将命令的输出通过管道传输到 grep 中:

mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration | grep '[0-9]/' | awk '{print $NF}

您可以一次性完成此操作 awk:

mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration |
awk ' == "IP" {gsub(/7/, "", $NF); print $NF}'

11.22.333.44/55

使用 cat file 因为我没有 mbimcli -d /dev/cdc-wdm0 -p --query-ip-configuration:

$ cat file | awk -F"'" '/IP \[/{print }'
11.22.333.44/55

$ cat file | awk -F"'" '/Gateway/{print }'
14.13.198.4

或者如果该命令的输出总是看起来像您发布的示例,也许这就是您所需要的:

$ cat file | awk -v RS= -F"'" '{print }'
11.22.333.44/55

$ cat file | awk -v RS= -F"'" '{print }'
14.13.198.4

我会利用 tr 进行预处理,利用 GNU AWK 进行处理,让 file.txt 内容成为

 IP [0]: '11.22.333.44/55'
Gateway: '14.13.198.4'
DNS [0]: '172.17.1.101'
DNS [1]: '172.17.1.102'
DNS [2]: '172.17.1.101'
DNS [3]: '172.17.1.102'

然后

cat file.txt | tr -d "'" | awk '/IP/{print $NF}'

输出

11.22.333.44/55

说明:如果行包含 IP.[=21=,则使用 tr 删除 ' 然后 awk 打印最后一列 ($NF) ]

(在 tr (GNU coreutils) 8.30 和 GNU Awk 5.0.1 中测试)