我想以下列方式更换字符串:
要求:
必须根据参考文件中的值更改输出。
输入:
aaaa
val1=xxx
val2=yyy
val3=zzz
bbbb
val1=ppp
val2=qqq
val3=rrr
aaaa
val1=xxx
val2=yyy
val3=zzz
参考文件:
block variable value
aaaa val1 iii
aaaa val2 jjj
aaaa val3 kkk
bbbb val1 eee
bbbb val2 fff
bbbb val3 ggg
输出:
aaaa
val1=iii
val2=jjj
val3=kkk
bbbb
val1=eee
val2=fff
val3=ggg
aaaa
val1=iii
val2=jjj
val3=kkk
当前方法:
目前我尝试使用Sed命令执行此操作。使用我能够替换1块代码,即
aaaa
val1=xxx
val2=yyy
val3=zzz
成,
aaaa
val1=iii
val2=jjj
val3=kkk
val1,val2,val3变量出现在块'aaaa'和'bbbb'中。但是对于块'aaaa',值将是不同的,对于块'bbbb',值将是不同的。 目前正在使用'sed'命令我可以替换块'aaaa'的值,但对于'bbbb'块,也会采用相同的值。
查询:
如何单独为一组特定行执行'sed'命令(或任何其他字符串替换命令)?我的要求是,控件必须检查块名称,然后从参考文件中获取变量的相关值。
如果有人能给我一个解决方案,那将会很有帮助。
谢谢!
太阳神-V
答案 0 :(得分:0)
如果此答案无效,请提前抱歉,但我无法发表评论,因此必须在此处发布。 您是否尝试过将grep与sed结合使用?你应该可以这样做:
grep bbbb filename | sed phrase to replace
答案 1 :(得分:0)
你的问题应该被编辑。除了“如何为一组特定的行单独执行'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命令的行。阅读文档可能会有所帮助。 (即man sed
)。换句话说,RTFM。