Назад | Перейти на главную страницу

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 между [по умолчанию] и следующим [ персонаж. Если это произойдет, он завершится с помощью 1в противном случае он перейдет к следующему sed линия, которая делает вставку.

GNU sed версии 4.1.5

Вы можете сделать это с помощью сценария sed, как вы это сделали, или используя ветки, чтобы выполнить sed только один раз, но, поскольку вы просите лучший способ, я бы использовал специальный более общий сценарий, который легче адаптировать. В конце концов, завтра вы, возможно, захотите изменить "lookandfeel" на "newgeneric" или "serverURL" на "/ forms / lservlet / debugmore". Например: