首页 > 解决方案 > 脚本中的 Sed 命令以查找字符串(如果存在),否则附加新字符串

问题描述

我试图在找到一个名为 xyz.txt 的文件后插入一个字符串。

这是 xyz.txt 文件:

/virtualhosts
    {
        "alsed-agency-starter.abc.com"
        "ecaas-fr-agency-starter.abc.com"
        "dvdvd-in-agency-starter.abc.com"
    }

在这里,我插入了一个新字符串“geg-de-starter.abc.com”,如下所示:

/virtualhosts
    {
        "geg-de-starter.abc.com"
        "alsed-agency-starter.abc.com"
        "ecaas-fr-agency-starter.abc.com"
        "dvdvd-in-agency-starter.abc.com"
    }

如何使用 sed (或任何其他方式)做到这一点?

标签: shellsed

解决方案


awk -v newStr='"geg-de-starter.abc.com"' '
    NR==FNR { if ( index($0,newStr) ) gotNew=1; next }
    index($0,"/virtualhosts") { gotBeg=1 }
    !gotNew && gotBeg && /"/ {
        indent = $0
        sub(/".*/,"",indent)
        print indent newStr
        gotBeg = 0
    }
1' file file
/virtualhosts
    {
        "geg-de-starter.abc.com"
        "alsed-agency-starter.abc.com"
        "ecaas-fr-agency-starter.abc.com"
        "dvdvd-in-agency-starter.abc.com"
    }

推荐阅读