我有一个包含以下内容的文件(它是来自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
,但这只取代了第一个点。我想我可能不得不使用前瞻或外观,但我不知道它是否可能,因为断言的长度是可变的。此外,属性名称中可能存在可变数量的点。
是否可以使用单线程进行此操作?
答案 0 :(得分: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