使用sed更改文件中的多行

使用sed更改文件中的多行,sed,Sed,因此,我试图修改/etc/resolv.conf以实现负载平衡。假设resolv.conf如下所示: search server.com nameserver 192.1.168.0 nameserver 192.1.168.1 nameserver 192.1.168.2 search server.com nameserver 192.1.168.2 nameserver 192.1.168.0 nameserver 192.1.168.1 LAST_OCTET_OF_IP=`/sbin

因此,我试图修改/etc/resolv.conf以实现负载平衡。假设resolv.conf如下所示:

search server.com
nameserver 192.1.168.0
nameserver 192.1.168.1
nameserver 192.1.168.2
search server.com
nameserver 192.1.168.2
nameserver 192.1.168.0
nameserver 192.1.168.1
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
目标是根据下面的脚本使主服务器不同。因此,如果服务器mod 6的IP地址的最后八位字节=1,那么resolv.conf将如下所示:

search server.com
nameserver 192.1.168.0
nameserver 192.1.168.1
nameserver 192.1.168.2
search server.com
nameserver 192.1.168.2
nameserver 192.1.168.0
nameserver 192.1.168.1
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
下面是脚本的一部分,用于实现负载平衡

# 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替换多行?

不确定使用
SED
有多重要

使用这种逻辑如何:

  • 获取始终相同的第一行:
    search server.com
  • 再加上你想要的那一行
  • 添加到
    nameserver
    行,但已添加的行除外
  • 大概是这样的:

    search server.com
    nameserver 192.1.168.0
    nameserver 192.1.168.1
    nameserver 192.1.168.2
    
    search server.com
    nameserver 192.1.168.2
    nameserver 192.1.168.0
    nameserver 192.1.168.1
    
    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
    

    不确定使用
    sed
    有多重要

    使用这种逻辑如何:

  • 获取始终相同的第一行:
    search server.com
  • 再加上你想要的那一行
  • 添加到
    nameserver
    行,但已添加的行除外
  • 大概是这样的:

    search server.com
    nameserver 192.1.168.0
    nameserver 192.1.168.1
    nameserver 192.1.168.2
    
    search server.com
    nameserver 192.1.168.2
    nameserver 192.1.168.0
    nameserver 192.1.168.1
    
    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
    

    我看到了你的回答,对不起,我本想早点回答的

    我最终还是没有使用sed(sed被推荐给我,但我仍然无法理解如何使用它)。 所以,我最终是这样做的:

    如果[$MOD6_IP-等式1] 然后
    猫我看到了你的回答,对不起,我本想早点回答的

    我最终还是没有使用sed(sed被推荐给我,但我仍然无法理解如何使用它)。 所以,我最终是这样做的:

    如果[$MOD6_IP-等式1] 然后
    cat为什么选择“sed专门用于此作业”而不是任何其他工具?为什么选择“sed专门用于此作业”而不是任何其他工具?