2011-03-11 82 views
2

我一直在使用sed(在這裏找到的教程:Grymoire)我們從硬件供應商處獲得的ASCII文件進行按摩。文件有一個結構,像這樣Sed多行不能替換模式

Model-Manufacturer:D12-500 
Test_Version:2.6.3 

但是,我們收到了一些文件是隨機的「破」與錯過的條目「模型製造商:」

Model-Manufacturer:D12-500 
Test_Version:2.6.3 
Model-Manufacturer:H24-700 
Test_Version:2.6.3 
Test_Version:2.6.3 
Model-Manufacturer:R15-300 
Test_Version:2.6.3 

我想解決這個問題,桑達和在第二次出現「Test_Version:2.6.3」之前放置「Model-Manufacturer:N/A」的缺失條目;這是我的代碼

sed -n ' 
/Test_Version/ { 
# found "Test_Version" - read in next line 
     N 
# look for "Test_Version" on the second line 
# and print if there. 
     /\n.*Test_Version/ { 
# found it - now edit making one line 
       s/Test_Version/Model-Manufacturer:N/A/ 
     } 
}' infile > outfile 

這是行不通的。我相信我需要在更換之前記住每個「Test_Version」和「Model_Manufacturer」的位置,對嗎?我可以用sed來做這個嗎?

在此先感謝您的意見。

回答

2

的替代更改爲:

s||\nModel-Manufacturer:N/A&| 

使用備用分隔符意味着你不必爲了逃避「N斜槓/一個」。使用空的左側重用最近的比賽。 &符將該匹配複製到右側。您也可以刪除-n

+0

我的替換已關閉。你的伎倆。謝謝。個人來說,sed真的踢了**。 – Chris 2011-03-11 21:11:49

1

如果我明白你想達到的目標,那麼你非常接近。我想改變替換命令如下使得它的工作:

s/\nTest_Version/\nMode-Manufacturer:N\/A\nTest_Version/