sed-当不存在时添加一行

sed-当不存在时添加一行

我有一个文件formsweb.cfg可能看起来有点像这样

# These match variables (e.g. %form%) in the baseHTML file. Their values
# may be overridden by specifying them in the URL query string
# (e.g. "http://myhost.example.com/forms/frmservlet?form=myform&width=700")
# or by overriding them in a specific, named configuration (see below)
[default]
# Default Oracle Forms values:
#baseHTML=base.htm
#baseHTMLjpi=basejpi.htm
width=1366
height=734

[sepwin]
separateFrame=True
lookandfeel=Generic

[debug]
serverURL=/forms/lservlet/debug

clientDPI=96该文件缺少应位于[default]该文件部分中的键值。

在 100 多个站点上,一些文件可能设置了 clientDPI,其他文件可能没有。

我想将该值添加到当前没有该值的文件中。

这是sed我写的脚本。有没有“更好的”怎么做呢?

sed -n '/\[default\]/,/^\[/ {
  /^clientDPI/q1
}' formsweb.cfg &&

sed '/\[default\]/,/^\[/ {
 /^\[default\]/ {
   a\
clientDPI=96
 }
}' -i.bak.${RANDOM} formsweb.cfg

它检查 clientDPI 是否存在于 [default] 和下一个[字符之间。如果存在,则退出1,否则,转到下一sed行,执行插入操作。

GNU sed 版本 4.1.5

答案1

您可以使用 sed 脚本执行此操作,或者像您所做的那样使用分支仅执行一次 sed,但是由于您要求更好的方法,我会使用专用的更通用的脚本,更容易适应。毕竟,明天您可能想将“lookandfeel”更改为“newgeneric”,或将“serverURL”更改为“/forms/lservlet/debugmore”。例如:

相关内容