本文介绍了awk或者sed在一个块替换线的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

输入文件包含:

[abc]  
para1=123  
para2=456  
para3=111  

[pqr]  
para1=333  
para2=765  
para3=1345  

[xyz]  
para1=888  
para2=236  
para3=964  

shell脚本的要求是,以取代特定块结果的一个参数
例如:替换 PARA2 = 765 PARA2 = 999 [PQR] 结果
请帮我,我怎么可以做到这一点 SED AWK 命令。

推荐答案

下面是我会怎么做:

awk '/^\[pqr\]/ {sub(/^para2=.*/,"para2=999")}1' RS= ORS="\n\n" file
[abc]
para1=123
para2=456
para3=111

[pqr]
para1=333
para2=999
para3=1345

[xyz]
para1=888
para2=236
para3=964

通过设置 RS 来什么都没有,你让 AWK 由空行分隔块模式的工作。结果
然后确保我们在正确的块被搜索块与开始[PQR] 结果
在此块中,从 PARA2 = 765 的数据更改为 PARA2 = 999 ,然后打印。

By setting RS to nothing, you make awk work in block mode separated by blank lines.
Then make sure we are in correct block by search for block starting with [pqr]
In this block, change the data from para2=765 to para2=999, then print it.

另一种方式来做到这一点:

Another way to do it:

awk '/^\[pqr\]/ {f=1} f && sub(/^para2=.*/,"para2=999"){f=0}1' file

设置一个标志,如果 PQR 被发现,更改数据,如果标志为true,复位标志。

Set a flag if pqr is found, change the data if flag is true, reset the flag.

这篇关于awk或者sed在一个块替换线的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-10 13:06