2016-04-13 76 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

相關問題