检测bash中的模式

时间:2015-05-31 09:32:10

标签: regex bash awk

我正在使用的文件如下所示(仅显示最后两行):

[16]((((((((((648:0.0167313,(((839:0.00281972,903:
[62](((909:0.00419522,895:0.00419522):0.004454hgip: 76898

在bash中,我如何检查最后一行是否包含字符串hgip - 如果是,请将[]后面的最后一行替换为上面那行(倒数第二行)的表达式,如这样:

[16]((((((((((648:0.0167313,(((839:0.00281972,903:
[62]((((((((((648:0.0167313,(((839:0.00281972,903:

因此,应该从原始数字保留该数字,但从倒数第二行复制该行的其余部分。该行开头的数字并不总是两个字符长,但可以是任何长度。在括号之后总是有一个( .....

2 个答案:

答案 0 :(得分:2)

像:

sed -n '/hgip/{s/].*/]/;G;s/\n//g};p;{s/\[[0-9]*\]//;x}'

答案 1 :(得分:0)

sed的美丽

sed '$!h; ${/hgip/{x; s/.*\]//; x; s/\(^.*\]\).*/\1/; G; s/\n//  }}' file