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

问题描述 投票:0回答:1

我想用awk或sed命令制作一个脚本来加固etcdefaultgrub文件。

原来的配置文件是这样的

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命令成功输出。

Desired output如下。

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/{$0=$0" 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

谁能帮帮我?

awk double-quotes
1个回答
0
投票

解决方法是将最后的引号改为 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
© www.soinside.com 2019 - 2024. All rights reserved.