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,但这只会替换第一个点。我想我可能不得不使用前瞻或后瞻,但我不知道这是否可能,因为断言的长度是可变的。属性名称中也可能有可变数量的点。

可以用单线做到这一点吗?

4

1 回答 1

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
于 2013-02-28T16:51:49.003 回答