คุณคือทางออก:
ฉันใช้ความยาวของเส้นขีดแรกเป็นตัวอ้างอิงความยาว
#! /ถัง/ทุบตี
RSYSLOG_FILENAME="/etc/rsyslog.conf"
awk -v ชื่อเซิร์ฟเวอร์ = "$1" '
/^#+$/ {
ndash = ความยาว ($ 0)
พิมพ์
ต่อไป
}
/^# เซิร์ฟเวอร์:/ {
str = "# " ชื่อเซิร์ฟเวอร์ ":/etc/rsyslog.conf"
nspace = ndash - ความยาว (str) - 1
ถ้า (nspace < 1) { nspace = 1 }
printf("%s%*.*s#\n", str, nspace, nspace, "")
ต่อไป
}
{
พิมพ์
}
' "${RSYSLOG_FILENAME}" > "${RSYSLOG_FILENAME}.tmp"
mv "${RSYSLOG_FILENAME}.tmp" "${RSYSLOG_FILENAME}"
อัปเดต
สำหรับหลายไฟล์
ไฟล์: ./sysconf.sh
#! /ถัง/ทุบตี
ประกาศ -r SERVER_NAME="$1"
กะ
สำหรับ CONF_FILENAME ใน "${@}"; ทำ
awk -v ชื่อเซิร์ฟเวอร์="${SERVER_NAME}" '
/^#+$/ {
ndash = ความยาว ($ 0)
พิมพ์
ต่อไป
}
/^# เซิร์ฟเวอร์:/ {
ตรงกัน($0, /[: ][^: #]*[ #]/, arr)
fn = arr[0]
gsub(/[: #]/, "", fn)
str = "# " ชื่อเซิร์ฟเวอร์ ":" fn
nspace = ndash - ความยาว (str) - 1
ถ้า (nspace < 1) { nspace = 1 }
printf("%s%*.*s#\n", str, nspace, nspace, "")
ต่อไป
}
{
พิมพ์
}
' "${CONF_FILENAME}" > "${CONF_FILENAME}.tmp"
mv "${CONF_FILENAME}.tmp" "${CONF_FILENAME}"
เสร็จแล้ว
ใช้แบบนั้น:
./sysconf.sh sv4 /etc/rsyslog.conf /etc/mysql/mariadb.cnf