如何在下一行插入模式匹配行?

时间:2016-04-13 08:59:00

标签: awk sed

我在文件中有一组以下的行,我想在输出后使用相同的行内容插入一个新行,而不是uat_reset_fwd_outputs它应该是Test_sample_data

[serverClass:UAT_SAI_Forwarder:app:uat_sai_inputs]  
[serverClass:UAT_SAI_Forwarder:app:uat_reset_fwd_outputs]  

[serverClass:UAT_TEST_Forwarder:app:uat_test_inputs]  
[serverClass:UAT_TEST_Forwarder:app:uat_reset_fwd_outputs]  

The output should look like below:  

[serverClass:UAT_SAI_Forwarder:app:uat_sai_inputs]  
[serverClass:UAT_SAI_Forwarder:app:uat_reset_fwd_outputs]  
[serverClass:UAT_SAI_Forwarder:app:Test_sample_data]  

[serverClass:UAT_TEST_Forwarder:app:uat_test_inputs]  
[serverClass:UAT_TEST_Forwarder:app:uat_reset_fwd_outputs]  
[serverClass:UAT_TEST_Forwarder:app:Test_sample_data]  

3 个答案:

答案 0 :(得分:0)

使用sed

sed 's/\(^.*\):.*outputs.*$/\0\n\1:Test_sample_data]/g' file.txt

此命令匹配包含字符串"输出"的任何行,捕获行的第一部分(在\ 1中)并附加" Test_sample_data"它。

答案 1 :(得分:0)

试试这个:

sed '/:[^:]*outputs] *$/{h;s//:Test_sample_data]/;x;G}' file

更新:

新行将附加到以outputs]结尾的任何行。

答案 2 :(得分:0)

使用此:

perl -lne 'print;if(/uat_reset_fwd_outputs/){s/uat_reset_fwd_outputs/Test_sample_data/;print $_}' your_file

如果您想进行替换,请使用以下内容:

perl -i -lne 'print;if(/uat_reset_fwd_outputs/){s/uat_reset_fwd_outputs/Test_sample_data/;print $_}' your_file