1

因此,我正在尝试修改 /etc/resolv.conf 以实现负载平衡。因此,假设 resolv.conf 看起来像这样:

search server.com
nameserver 192.1.168.0
nameserver 192.1.168.1
nameserver 192.1.168.2

目标是根据下面的脚本使主服务器不同。因此,如果服务器的 IP 地址的最后一个八位组 mod 6 = 1,那么 resolv.conf 将如下所示:

search server.com
nameserver 192.1.168.2
nameserver 192.1.168.0
nameserver 192.1.168.1

这是执行负载平衡的脚本的一部分

# Load balance
LAST_OCTET_OF_IP=`/sbin/ifconfig -a |grep "inet addr" |grep 128|cut -d : -f 2|cut -d" " -f1|cut -d'.' -f 4`
MOD6_IP=$(( $LAST_OCTET_OF_IP % 6 ))

if [ $MOD6_IP -eq 1 ]
    # need this part

if [ $MOD6_IP -eq 2 ]
    # need this part

在此示例中,如何使用 SED 替换多行?

4

2 回答 2

1

不知道使用它有多重要sed

如何使用这个逻辑:

  1. 获取始终相同的第一行:search server.com
  2. 添加到您想要的正确行
  3. 添加到该nameserver行,除了您已经添加的行

像这样的东西:

LAST_OCTET_OF_IP=`/sbin/ifconfig -a |grep "inet addr" |grep 128|cut -d : -f 2|cut -d" " -f1|cut -d'.' -f 4`
MOD6_IP=$(( $LAST_OCTET_OF_IP % 6 ))
{
grep ^search /etc/resolv.conf
grep $MOD6_IP$ /etc/resolv.conf
grep -v $MOD6_IP$ /etc/resolv.conf | grep nameserver
} > /etc/resolv.conf.new
于 2013-10-12T20:43:00.037 回答
0

看到你的回复了,不好意思我要早点回复。

毕竟我最终没有使用 sed(向我推荐了 sed,但我仍然无法弄清楚使用它)。所以,我最终这样做了:

如果 [ $MOD6_IP -eq 1 ]

然后

猫 <<\EOF>/etc/newresolv

搜索 server.com

名称服务器 192.1.168.0

名称服务器 192.1.168.1

名称服务器 192.1.168.2

EOF

如果 [ $MOD6_IP -eq 2 ]

然后

猫<<\EOF> /etc/newresolv

搜索 server.com

名称服务器 192.1.168.1

名称服务器 192.1.168.2

名称服务器 192.1.168.0

EOF

cp /etc/newresolv /etc/resolv.conf

于 2013-10-25T16:51:28.707 回答