在文件中搜索 n 替换第 n 行

在文件中搜索 n 替换第 n 行

如果有人能帮助我,我将不胜感激。我想要实现的是 - 在名为 test.conf 的文件中,包含多个段落。首先在该段落中搜索单词“Full”,如果找到,则转到该段落的第 3 行,然后查找并将单词“old”替换为“NEW”。请看示例,但在第二段中,我不想将“old”替换为“NEW”,因为第一个条件是该段落中不存在单词“Full”。紧接着,在第三段中需要将“old”替换为“NEW”,因为两个条件都存在。

换句话说,如果同时找到第一个搜索模式“Full”和第二个模式“old”,则用“NEW”替换第二个模式“old”,否则不执行任何操作

猫测试配置文件

       description
        server1
        group members
        User CMF **Full** 
        cont_Bred,cont_Hery,cont_Josh
        a,b,c,d
        **old**!text!user_CMF!CMF


        description
        server1
        group members
        User CMF Half 
        cont_Bred,cont_Hery,cont_Josh
        a,b,c,d
        old!text!user_CMF!CMF


        description
        server1
        group members
        User HTP **Full** 
        cont_Bred,cont_Hery,cont_Josh
        a,b,c,d
        **old**!text!user_HTP!HTP

答案1

这应该可以解决问题:

lineNums=$(grep -n "Full" test | cut -d: -f1); for lineNum in $lineNums; do targetLine=$(($lineNum+3)); sed -i "${targetLine}s/old/NEW/" test; done

相关内容