2013-02-28 4 views
2

У меня есть файл со следующим содержимым (это .properties файл из Java):Заменить точки в имени свойства, но не в стоимости недвижимости

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, но это заменяет только первую точку. Я думаю, мне, возможно, придется использовать lookaheads или 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

+0

@jvallver мой ответ может решить вашу проблему. однако я бы сказал, что соглашение об именах имени prop в файле свойств java имеет «точка», а не подчеркивание. – Kent

+0

Я знаю, но у меня проблемы с Дженкинсом, интерпретирующим свойства с точками в их именах, используя плагин EnvInject. Я пытаюсь сделать это как обходной путь в одной конкретной сборке, но обычно я использую свойства, разделенные точками :) – jvallver