2016-04-13 40 views
0

我有一个低于设定在一个文件中的行,我想插入新行与行的相同内容的输出后,但代替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] 

回答

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 
0

使用sed

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

该命令匹配任何包含字符串“outputs”的行,捕获该行的第一部分(在\ 1中)并向其中附加“Test_sample_data”。

+0

这是替换字符串匹配模式“输出”到Test_sample_data”但我需要的。输出应附加在匹配模式的下一行 输出应如下所示: [serverClass:UAT_TEST_Forwarder:app:uat_test_inputs] [serverClass:UAT_TEST_Forwa rder:app:uat_reset_fwd_outputs] [serverClass:UAT_TEST_Forwarder:app:Test_sample_data] – Sai

+0

它不会替换输出行。在它后面添加一条新的线。这就是'\ 0 \ n \ 1'所做的。你尝试过运行我的命令吗? – dogbane

+0

是的,我没有尝试和输出如下: sed's /\(^.*\):.* outputs。* $/\ 0 \ n \ 1:Test_sample_data]/g'pesting [serverClass :UAT_SAI_Forwarder:应用:uat_sai_inputs] 0N [serverClass:UAT_SAI_Forwarder:应用:Test_sample_data] [serverClass:UAT_TEST_Forwarder:应用:uat_test_inputs] 0N [serverClass:UAT_TEST_Forwarder:应用:Test_sample_data] – Sai

0

试试这个:

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

更新:

新的生产线将被追加到outputs]结束的任何行。

+0

它不工作。这个问题有一些小的更正。 uat_reset_fwd_outputs不是常量。对于我给uat_reset_fwd_outputs的实例,文件中有很多以输出结尾的行。此外,即时通讯要传达我的不是GNU版本。我使用Mac。 – Sai

+0

我更新了我的答案。 – SLePort

相关问题