使用sed更改文件中的多行

时间:2013-10-10 18:40:41

标签: sed

所以,我正在尝试修改/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替换多行?

2 个答案:

答案 0 :(得分:1)

不确定使用sed的重要性。

如何使用这个逻辑:

  1. 获得始终相同的第一行:search server.com
  2. 添加您想要的正确行
  3. 添加nameserver行除了您已添加的行
  4. 这样的事情:

    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
    

答案 1 :(得分:0)

我看到了你的回答,对不起,我打算早点回复。

毕竟我最终没有使用sed(sed被推荐给我,但我还是无法用它来解决它)。 所以,我最终这样做了:

如果[$ MOD6_IP -eq 1]

然后

cat<< \ EOF> / etc / newresolv

搜索server.com

nameserver 192.1.168.0

nameserver 192.1.168.1

nameserver 192.1.168.2

EOF

网络连接

如果[$ MOD6_IP -eq 2]

然后

猫<< \&EOF GT;在/ etc / newresolv

搜索server.com

nameserver 192.1.168.1

nameserver 192.1.168.2

nameserver 192.1.168.0

EOF

网络连接

cp / etc / newresolv /etc/resolv.conf