【问题标题】:Replace multiple property values with new variables用新变量替换多个属性值
【发布时间】:2015-11-24 04:49:02
【问题描述】:

我正在做一点 Shell/Bash 自动化,我有一个属性文件,我需要用新值更新。

属性文件的格式为:key.name=value。也就是说,如果属性键有多个单词,则用句点分隔。

我有这个方法,我试图用我的新变量替换旧变量。我遇到的一个问题是该方法中的最后一次调用将覆盖以前的编辑......

我对 shell/bash 脚本非常陌生,我不确定使用 shell 完成多个值替换的最佳方法是什么。任何帮助表示赞赏。谢谢。

旧方法

modify_properties () {
  awk -F"=" -v new_var1="$variable1" '/property.name1/{$2=new_variable;print;next}1' template.properties > new.properties
  awk -F"=" -v new_var2="$variable2" '/property.name2/{$2=new_variable;print;next}1' template.properties > new.properties
  awk -F"=" -v new_var2="$variable2" '/property.name3/{$2=new_variable;print;next}1' template.properties > new.properties
}

新方法

modify_properties () {
   awk -F"=" -v new_ip="$private_ip" -v new_dns="$public_dns" '/prop.internaladdress/{$2=new_ip}/prop.externaladdress/{$2=new_dns}/prop.hostname/{$2=new_dns}1' template.properties > new.properties
 }

【问题讨论】:

  • 将所有 awk 脚本位放入一个 awk 脚本而不是三个。在第一个电话之后使用new.properties。等
  • 我更新了方法,但我想用 2 个变量更改 3 个不同的属性。其中两个属性将具有相同的变量 (variable2)

标签: bash shell awk


【解决方案1】:

只需拨打awk即可完成所有操作。

modify_properties () {
  awk -F"=" -v new_var1="$variable1" -v new_var2="$variable2" '/property.name1/{$2=new_variable}/property.name2/{$2=new_variable}/property.name3/{$2=new_variable}1' template.properties > new.properties
}

还要注意您实际上并不需要 ;print;next 位,尽管离开它不会真正伤害任何东西。

或者,您可以使用多个临时文件,每次调用 awk 时使用上一个输出文件。

【讨论】:

  • 好的,所以我正在尝试实现您所展示的“一次性”awk 版本。它正在替换值,但它也摆脱了每个属性/值之间的= 标志。你知道那会发生在哪里吗?
  • 您的原件也有这个问题。您没有将OFS 设置为=,因此 awk 使用默认空间作为分隔符。在命令中添加-v OFS==
  • 呵呵,有意思,不知道。太棒了,谢谢你的帮助。似乎现在可以工作了
猜你喜欢
  • 2018-04-19
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多