【问题标题】:replacing a specific column value by searching for its variable using awk/sed utility通过使用 awk/sed 实用程序搜索其变量来替换特定列值
【发布时间】:2021-04-21 19:55:06
【问题描述】:

有一个conf文件,内容如下

ipaddr = 192.168.10.1
hostanme = test
homefolder = /home/user1

如何使用 awk 实用程序将 homefolder 的值替换为不同的值。我希望能够使用关键字“homefolder”搜索 conf 文件,然后替换它的值。我不想使用行号来选择这一行。配置文件将来可能会附加更多详细信息,因此使用行号可能不合适

【问题讨论】:

  • 到底是awk还是sed?

标签: awk


【解决方案1】:

你可以试试:

awk -vVALUE=some_path  -F= '/homefolder/ { print $1 " = " VALUE }' yourfile

some_path 应该是新值

编辑: 正如@karakfa 和@EdMorton 所建议的,更好的版本可能是:

awk -v new_path=some_path  -F' *= *' '$1=="homefolder" { print $1 " = " new_path }' yourfile

不同之处在于分隔符将由任意数量的空格包围(因此输出中没有额外的空格),而我的版本将匹配mainhomefolder = /home/xyz 之类的行,而测试$1=="homefolder" 将仅匹配homefolder 完全正确。

感谢cmets

【讨论】:

  • ... -F' *= *' '$1=="homefolder" ... 更好。
  • 不在-v 和您的变量名之间放置空格会使脚本不必要地特定于 gawk。使用-v var=value 而不是-vvar=value 可移植到所有awks。此外,不要使用所有大写的变量名,以避免与内置变量名发生冲突并混淆代码,使您看起来像是在使用内置变量,而实际上它们是用户定义的。
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 2014-09-08
  • 2020-06-24
  • 2012-06-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-08
相关资源
最近更新 更多