2012-10-22 43 views
0

我正在寫一個腳本,用於將一些代碼桑達印刷圖案的空間。我有但是我需要使用-n命令,以防止圖案空間自動打印抑制重複印刷執行適當的轉換一個sed命令。然而,這樣可以防止打印我想要輸出的任何其他行。這是我正在使用的腳本。當有不匹配

sed -i -r 's/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,[ ]*(I((.[A-z]+)+)),[ ]*\{/ class \4 extends \5 { /p 
/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,/ { 
N 
s/ *\n//
s/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,[ ]*(I((.[A-z]+)+)),[ ]*\{*/ class \4 extends \5 { \ 
/p 
} 
' 

測試輸入文件可以在這裏找到:https://www.dropbox.com/s/h9vly1hwtqtl8te/TestText.txt 兩個不同的結果由具有/不具有在腳本-n開關可以在這裏找到:HTTPS://www.dropbox.com/s /f0g8horafwial1x/TestText.txt.ts_result1.txt 這裏:https://www.dropbox.com/s/ekualxj7foapgml/TestText.txt.ts_result2.txt 與期望的結果正在這裏找到:https://www.dropbox.com/s/3510oh899fh0ji2/TestText.txt.ts_resultdesired.txt

是否有可能獲得預期的效果?

我跑 $ SED --version GNU sed的版本4.2.1

+0

我想你'[A-Z]'範圍應該是'[A-ZA-Z]'? –

回答

0

另一種方式來防止雙印刷是將一個d最後一個打印命令後(允許你刪除-n) 。此外,因爲你有一個條件打印後,您可以使用,而不是t命令時,會跳轉到一個標籤(在這種情況下,d命令之前done標籤),當一個替代成功(即它打印東西的話) 。

sed -i -r 's/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,[ ]*(I((.[A-z]+)+)),[ ]*\{/ class \4 extends \5 { /p 
/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,/ ! t done 
/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,/ { 
N 
s/ *\n//
s/^[ ]*Class[(]"(I((.([A-Za-z]+)))+)"[ ]*,[ ]*(I((.[A-z]+)+)),[ ]*\{*/ class \4 extends \5 { \ 
/p 
: done 
d 
} 
' 

(注:沒有測試,雖然...)

+0

感謝。對於我的測試案例它的作品。 –