Вот вам решение:
Я использую длину первой штриховой линии в качестве эталона длины.
#! /бин/баш
RSYSLOG_FILENAME="/etc/rsyslog.conf"
awk -v имя_сервера="$1" '
/^#+$/ {
ndash = длина ($0)
Распечатать
следующий
}
/^# СЕРВЕР:/ {
str = "# " имя_сервера ":/etc/rsyslog.conf"
nspace = ndash - длина (строка) - 1
если (nspace < 1) {nspace = 1}
printf("%s%*.*s#\n", строка, nspace, nspace, "")
следующий
}
{
Распечатать
}
' "${RSYSLOG_FILENAME}" > "${RSYSLOG_FILENAME}.tmp"
mv "${RSYSLOG_FILENAME}.tmp" "${RSYSLOG_FILENAME}"
ОБНОВИТЬ
Для нескольких файлов.
Файл: ./sysconf.sh
#! /бин/баш
объявить -r ИМЯ_СЕРВЕРА = "$1"
сдвиг
для CONF_FILENAME в "${@}"; делать
awk -v имя_сервера="${ИМЯ_СЕРВЕРА}" '
/^#+$/ {
ndash = длина ($0)
Распечатать
следующий
}
/^# СЕРВЕР:/ {
match($0, /[: ][^: #]*[ #]/, обр.)
фн = обр[0]
gsub(/[: #]/, "", fn)
str = "# " имя_сервера ":" fn
nspace = ndash - длина (строка) - 1
если (nspace < 1) {nspace = 1}
printf("%s%*.*s#\n", строка, nspace, nspace, "")
следующий
}
{
Распечатать
}
' "${CONF_FILENAME}" > "${CONF_FILENAME}.tmp"
mv "${CONF_FILENAME}.tmp" "${CONF_FILENAME}"
сделано
Используется так:
./sysconf.sh sv4 /etc/rsyslog.conf /etc/mysql/mariadb.cnf