如果有人能帮助我,我将不胜感激。我想要实现的是 - 在名为 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