使用unixshell脚本替换字符串

使用unixshell脚本替换字符串,unix,awk,sed,Unix,Awk,Sed,我想用以下方式替换字符串: 要求: 必须根据参考文件中的值更改输出 输入: 参考文件: 输出: 目前的做法: 目前,我尝试使用Sed命令执行此操作。使用它我可以替换1块代码,即 aaaa val1=xxx val2=yyy val3=zzz 变成 val1、val2、val3变量出现在块“aaaa”和“bbbb”中。但对于块“aaaa”,值将不同,而对于块“bbbb”,值将不同。 目前使用“sed”命令,我可以替换块“aaaa”的值,但对于“bbbb”块,也可以使用相同的值 查询: 如何仅对一

我想用以下方式替换字符串:

要求:

必须根据参考文件中的值更改输出

输入:

参考文件:

输出:

目前的做法:

目前,我尝试使用Sed命令执行此操作。使用它我可以替换1块代码,即

aaaa
val1=xxx
val2=yyy
val3=zzz
变成

val1、val2、val3变量出现在块“aaaa”和“bbbb”中。但对于块“aaaa”,值将不同,而对于块“bbbb”,值将不同。 目前使用“sed”命令,我可以替换块“aaaa”的值,但对于“bbbb”块,也可以使用相同的值

查询:

如何仅对一组特定的行执行“sed”命令或任何其他字符串替换命令?我的要求是,控件必须检查块名,然后从引用文件中获取变量的相关值

如果有人能给我一个解决方案,那将是非常有帮助的

谢谢

Ra-V

如果这个答案没有帮助,请提前道歉,但我无法留下评论,所以必须在这里发布。 您是否尝试过将grep与sed结合使用?您应该能够执行以下操作:


grep bbbb filename | sed短语替换

您的问题应该编辑。除了如何单独为一组特定的行执行“sed”命令或任何其他字符串替换命令外,我忽略了所有这些命令?这似乎是问题的核心

sed接受地址。要按行号指定特定行,请执行以下操作:

sed -e '4,6s/foo/bar/'
将“foo”的第一个实例替换为“bar”,但仅在第4行到第6行

sed -e '/baz/s/foo/bar/'
将仅在与模式“baz”匹配的行上进行替换

sed -e '/baz/{/qux/s/foo/bar/; }'
将仅在与模式“baz”和模式“qux”匹配的行上进行替换


有许多方法可以指定要在其上执行sed命令的行。阅读文档可能会有所帮助。我是一个男人。换句话说,RTFM。

谢谢您的评论!我确实按照您的建议使用了,>sed-I'/baz/4,6s/foo/bar/'filename.txt。我这里的问题是,我们正在参数化所有的值,这将使它像这样,>sed-i$baz'/'$Line_START','$Line_END's/'$old_val'/'$new_val'/'filename.txt这会产生一些语法错误和问题。简而言之,行号和所有字符串值都是动态的,因此作为变量传入。有没有更好的办法?请更正我…sed-e$START、${END}s/$PATTERN/$REPL/-e$S2、${E2}s/$PATT2/$REPL2/谢谢您的评论!我确实使用了,>sed-I'/baz/4,6s/foo/bar/'filename.txt我这里的问题是我们正在参数化所有的值,这会使它像这样,>sed-I$baz'/'Line\u START','Line\u END's/'old\u val'/'new\u val'/'filename.txt这会产生一些语法错误和问题。简而言之,行号和所有字符串值都是动态的,因此作为变量传入。有没有更好的办法?请纠正我。。。。
aaaa
val1=iii
val2=jjj
val3=kkk
sed -e '4,6s/foo/bar/'
sed -e '/baz/s/foo/bar/'
sed -e '/baz/{/qux/s/foo/bar/; }'