linux如何在某两个关键字之间再作替换

原始文件为AAACCC(DDD)FFF;BBBAAACCC(EEE);CCC;需要修改为AAADDD(DDD)FFF;BBBAAAEEE(EEE);CCC;需要做的事是,... 原始文件为
AAA CCC (DDD)
FFF ;
BBB AAA CCC
(EEE) ;
CCC ;

需要修改为
AAA DDD (DDD)
FFF ;
BBB AAA EEE
(EEE) ;
CCC ;

需要做的事是,先寻找AAA和“;”之间的字段(可能为多行),再查找括号内的字段(DDD或EEE),最后将CCC替换为对应的字段。

如何解决?最好通过sed awk 等命令解决
展开
 我来答
wy_dian
2015-07-10 · TA获得超过205个赞
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:82.5万
展开全部

1,将要处理的文件:

$cat file2
AAA CCC (DDD)
FFF;
BBB AAA CCC
(EEE);
CCC;
BBB AAA CCC
DDD FFF
(EEE);

2,你想要结果使用的处理命令(awk命令都在一行上)及结果:

$awk 'BEGIN {miline="";} {miline=miline"\n"$0;if(match($0,/;$/)){i=index(miline,"(");if(i>0){j=index(miline,")");replace=substr(miline,i+1,j-i-1);sub(/CCC/,replace,miline);}sub(/\n/,"",miline);print miline;miline="";} }' file2
AAA DDD (DDD)
FFF;
BBB AAA EEE
(EEE);
CCC;
BBB AAA EEE
DDD FFF
(EEE);
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式