如何使用sed命令在bash脚本中追加行?

时间:2016-07-13 10:24:45

标签: linux bash sed

我的基础设施问题是SMTP服务器IP地址是动态的..我使用Vyatta防火墙&我试图编写一个脚本,每隔60分钟检查一次SMTP IP,如果更改了SMTP IP,它应该自动更新防火墙规则(配置)..

#!/bin/bash

SMTP=$(nslookup smtp.sendgrid.net | awk -F': ' 'NR==6 { print $2 }')
SMTP_IP=x.x.x.x

if [ $SMTP != $SMTP_IP ]
then
???
else
echo "GREEN"
fi

我的防火墙规则如下所示:

    rule 979 {
        destination {
            address "Current SMTP IP"
        }
        outbound-interface bond1
        source {
            address 10.x.x.x
        }
        translation {
            address 200.x.x.x
        }
    }

我希望我的脚本能够更新先前规则中的防火墙规则。例如:

.
.
.    
rule 978 {
    destination {
        address "NEW SMTP IP"
    }
    outbound-interface bond1
    source {
        address 10.x.x.x
    }
    translation {
        address 200.x.x.x
    }
}

我是一个网络人物&掌握一些脚本基础知识。有人可以帮助我使用bash脚本解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,您希望在“目的地”一词下的“地址”行中将一个IP地址替换为规则中的另一个IP地址。像这样:

#! /usr/bin/awk -f

/destination/ { N = NR + 1 }

NR == N && /address/ && index($0, OLD_IP) {
    pos = index($0, OLD_IP)
    print substr($0, 1, pos), NEW_IP
    next
}
{ print }

我们寻找带有“目的地”的线路,并记录下一个线路号码。在下一行,我们查找“地址”,并查看旧IP地址是否出现在那里。如果是,我们使用新的IP地址打印修改的规则。其他只是打印。

调用

$ awk -v OLD_IP=x.x.x.x -v NEW_IP=${SMTP} -f rules.awk firewall_rules

它应该做的伎俩。