2013-02-28 83 views
2

我有以下內容的文件(這是從Java .properties文件):在屬性名替換點,但沒有在屬性值

product.company.url=http://www.example.com/ 
product.version=1.3.2 

我需要替換所有點的屬性名,但不屬於財產價值。所以,我需要的輸出將是:

product_company_url=http://www.example.com/ 
product_version=1.3.2 

我已經試過sed -r 's/\.(\w+)([^=]*)/_\1\2/' product.default.properties但這只是取代了第一點。我想我可能不得不使用lookahead或lookbehinds,但我不知道這是否可能,因爲斷言的長度是可變的。在屬性名稱中也可能有可變數量的點。

是否可以用單線程來做到這一點?

回答

2

嘗試這一行:

awk -F= -vOFS="=" 'gsub(/\./,"_",$1)+1' file.properties 

測試你的榜樣:

kent$ echo "product.company.url=http://www.example.com/ 
product.version=1.3.2"|awk -F= -vOFS="=" 'gsub(/\./,"_",$1)+1' 
product_company_url=http://www.example.com/ 
product_version=1.3.2 
+0

這是完美的!非常感謝(我還不能接受答案,將在10分鐘內完成) – jvallver 2013-02-28 16:53:19

+0

@jvallver我的答案可能會解決您的問題。但是我會說,java屬性文件中prop name的命名約定是用「dot」,而不是下劃線。 – Kent 2013-02-28 16:57:13

+0

我知道,但我在使用EnvInject插件解釋屬性中帶有點的屬性時遇到了問題。我試圖將這作爲一個具體構建中的解決方法,但通常我使用點分隔的屬性:) – jvallver 2013-02-28 16:59:19