使用 AWK 将两个参数添加到双引号内的配置中

Using AWK to add two parameter into a config inside a double quotes

我想使用 awk 或 sed 命令并生成用于强化 /etc/default/grub 文件的脚本:

原来的配置文件是这样的:

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg00-swap rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

并想在 GRUB_CMDLINE_LINUX= 行内添加 "ipv6.disable=1 audit=1" 问题是配置在双引号内引用,因此我无法使用 awk 命令成功输出它

期望的输出如下:

GRUB_TIMEOUT=5
    GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
    GRUB_DEFAULT=saved
    GRUB_DISABLE_SUBMENU=true
    GRUB_TERMINAL_OUTPUT="console"
    GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg00-swap rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet ipv6.disable=1 audit=1"
    GRUB_DISABLE_RECOVERY="true"
    GRUB_ENABLE_BLSCFG=true

我试过如下,结果参数不在双引号内:

awk '/GRUB_CMDLINE_LINUX/{[=13=]=[=13=]" ipv6.disable=1 audit=1"}{print}' /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg00-swap rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet" ipv6.disable=1 audit=1
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true

有人可以帮帮我吗?

解决方法是匹配结束引号,替换为ipv6.disable=1 audit=1"

awk '/GRUB_CMDLINE_LINUX/{sub("\"$", " ipv6.disable=1 audit=1\"")}1'/etc/default/grub

概念验证

$ awk '/GRUB_CMDLINE_LINUX/{sub("\"$", " ipv6.disable=1 audit=1\"")}1' /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/vg00-swap rd.lvm.lv=vg00/root rd.lvm.lv=vg00/swap rhgb quiet ipv6.disable=1 audit=1"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true