【发布时间】:2010-10-24 12:37:06
【问题描述】:
我有一个小的 awk 脚本,它可以对文件进行一些就地修改(对 Java .properties 文件,给你一个想法)。这是影响大量用户的部署脚本的一部分。
我希望能够设置默认值,将文件的其余部分留给用户的偏好。这意味着如果缺少配置行,则附加配置行,如果存在则对其进行修改,其余所有内容保持不变。
目前我使用这样的东西:
# initialize
BEGIN {
some_value_set = 0
other_value_set = 0
some_value_default = "some.value=SOME VALUE"
other_value_default = "other.value=OTHER VALUE"
}
# modify existing lines
{
if (/^some\.value=.*/)
{
gsub(/.*/, some_value_default)
some_value_set = 1
}
else if (/^other\.value=.*/)
{
gsub(/.*/, other_value_default)
other_value_set = 1
}
print $0
}
# append missing lines
END {
if (some_value_set == 0) print some_value_default
if (other_value_set == 0) print other_value_default
}
特别是当我要控制的行数变大时,这越来越麻烦。我的 awk 知识并不是那么好,而且上面只是 感觉 错了 - 我该如何简化呢?
P.S.:如果可能的话,我想留在 awk。请不要只推荐使用 Perl/Python/whatever 会容易得多。 :-)
【问题讨论】:
-
您发布的内容似乎是 awk,而不是 sed。
-
我全神贯注地写这篇文章,以至于我什至没有注意到。已更正。
-
Perl/Python/Whatever 会容易得多 ;-)
-
@Sean Bright:我只是在数秒,直到有人发表评论。 :-D
-
讽刺的是,肖恩的回答比 perl/python 等价物更容易
标签: regex deployment awk configuration-files