2016-08-25 27 views
0

我有編輯巨大C++文件,其中我使用sed轉換List(something)List<something>爲什麼我這樣做是因爲我們的名單已轉換爲模板的問題。桑達查找和替換cpp文件(.C)

命令我已經寫在小的shell文件是這樣的

sed -i '/List/s/(/</g' $1 
sed -i '/List/s/)/>/g' $1 

但該命令與清單角括號等相關聯的整條生產線,

some_Fun(List(something))轉換爲some_Fun<List<something>>

我不希望sed更改爲some_Fun<>sed應該保留some_Fun()並且只將List()更改爲List<>

回答

1

您可以使用此sed

sed 's/\(List\)(\([^)]*\))/\1<\2>/g' file 

(OR)

sed 's/List(\([^)]*\))/List<\1>/g' file 
+0

可能增加,這也將改變'名單()''到列表<>'..如果不是最好使用'\ +'而不是'*' – Sundeep

+0

這改變了funcList()到funcList <>它只能轉換List而不是Listkeyword關聯所有函數名。 – chandu

+0

謝謝大家,這是我現在的任務,我會努力的。 – chandu