使用 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
我想使用 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