我有以下输出:
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地址:
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地址吗?我想把它们存储在一个数组中。
发布于 2014-03-06 07:34:01
这是众多可能性中的一种: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发布于 2014-03-06 08:23:37
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发布于 2014-03-06 08:02:44
一个简单易懂的解决方案是:(存储在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.8https://stackoverflow.com/questions/22217809
复制相似问题