【问题标题】:cut ip addresses from config file从配置文件中剪切IP地址
【发布时间】:2014-04-08 16:40:34
【问题描述】:

我有以下输出:

vif         = [ 'ip=1.2.3.4, mac=00:00:00:00:00:00, bridge=eth1', 'ip=5.6.7.8, mac=00:00:00:00:00:00, bridge=eth1' ]

有时,只有一个 IP 地址。所以它是:

vif         = [ 'ip=1.2.3.4, mac=00:00:00:00:00:00, bridge=eth1' ]

而在其他情况下,ip地址超过2个:

vif         = [ 'ip=1.2.3.4, mac=00:00:00:00:00:00, bridge=eth1', 'ip=5.6.7.8, mac=11:11:11:11:11:11, bridge=eth1', 'ip=9.1.2.3, mac=22:22:22:22:22:22, bridge=eth1' ]

有没有一种简单的方法可以只获取 IP 地址?我想将它们存储在一个数组中。

【问题讨论】:

  • 使用grep -- 你会在这个网站上找到很多这样的例子。
  • 看起来像一个 python 或 ruby​​ 数组。

标签: linux bash pipe output cut


【解决方案1】:

这是众多可能性中的一种:tr -s "[,'" "\n" | grep "^ip=" | cut -d "=" -f2

例子:

echo "vif         = [ 'ip=1.2.3.4, mac=00:00:00:00:00:00, bridge=eth1', 'ip=5.6.7.8, mac=11:11:11:11:11:11, bridge=eth1', 'ip=9.1.2.3, mac=22:22:22:22:22:22, bridge=eth1' ]" | tr -s "[,'" "\n" | grep "^ip=" | cut -d "=" -f2

生产

1.2.3.4
5.6.7.8
9.1.2.3

【讨论】:

  • 您的解决方案忘记了第一个 ip (1.2.3.4)。您应该在以下位置修改 tr 命令: tr -s "[," "\n"
  • @JuniorDussouillez 谢谢!我完全错过了输出不正确。
  • 谢谢!我会使用你的解决方案:)
【解决方案2】:

I want to store them in an array.

您可以将搜索到的 IP 地址存储在数组中,如下所示。

str="vif         = [ 'ip=1.2.3.4, mac=00:00:00:00:00:00, bridge=eth1', 'ip=5.6.7.8, mac=11:11:11:11:11:11, bridge=eth1', 'ip=9.1.2.3, mac=22:22:22:22:22:22, bridge=eth1' ]"

myarr=$(echo $str | tr -s "[,'" "\n" | awk '{for(i=1;i<=NF;i++){if($i~/ip/){sub("ip=","",$i);print $i}}}')

for i in "${myarr[@]}"
do
  printf "%s \n" $i
done

【讨论】:

  • 我相信它也可以。但是 awk 部分对我来说非常复杂:P
  • @Vince 随你喜欢,但它是不同的技巧,你也可以使用相同的技巧通过使用“scai”方法将 ip 存储在数组中。
【解决方案3】:

一个简单易懂的解决方案是:(数据存储在file

cat file | grep -o "'[^']*'" | grep -o "ip=[^,]*"

输出:

ip=1.2.3.4
ip=5.6.7.8
ip=9.1.2.3
ip=1.2.3.4
ip=1.2.3.4
ip=5.6.7.8

只查看地址:

cat file | grep -o "'[^']*'" | grep -o "ip=[^,]*" | cut -d"=" -f2

输出:

1.2.3.4
5.6.7.8
9.1.2.3
1.2.3.4
1.2.3.4
5.6.7.8

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2013-05-17
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2022-03-03
    • 1970-01-01
    相关资源
    最近更新 更多