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

标签 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 脚本帮助我解决这个问题吗???

最佳答案

如果我理解您的问题,您想在“目的地”一词下的“地址”行的规则中用一个 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 }

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

调用为

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

它应该可以解决问题。

关于linux - 如何使用 sed 命令在 bash 脚本中追加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348991/

相关文章:

JAVA_HOME 和 PATH 已设置,但 java -version 仍显示旧版本

linux - 使用 AWK 对列求和并显示带有标签的总计

bash - 可以使用脚本下载和配置jenkins吗?

linux - shebang 无法在 Linux 中运行 bash 脚本

bash - 比较两个文件列(未排序的文件)

regex - 如何使用 SED 替换子字符串中的特定字符

sed - 用前导减号替换尾随减号

python - tcpkill : write: Operation not permitted with subprocess. 弹出

linux - Boost.Python 快速入门失败

linux - Perl + 在 Perl 一行代码中添加警告按摩