You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用sed在GRUB_CMDLINE_LINUX行引号前添加指定参数且避免重复

解决GRUB_CMDLINE_LINUX参数添加位置错误及重复添加问题

问题说明

需求:在以GRUB_CMDLINE_LINUX开头的行中,将scsi_mod.scan=sync添加到双引号内部的末尾;若该参数已存在,则不重复添加。

之前执行的错误命令:

sed -i '/GRUB_CMDLINE_LINUX/s/$/ scsi_mod.scan=sync/' /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 rd.lvm.lv=VG/LV_root rd.lvm.lv=VG/lv_swap ipv6.disable=1 rhgb quiet scsi_mod.scan=sync" scsi_mod.scan=sync
GRUB_DISABLE_RECOVERY="true"

预期结果:参数位于双引号内部末尾

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 rd.lvm.lv=VG/LV_root rd.lvm.lv=VG/lv_swap ipv6.disable=1 rhgb quiet scsi_mod.scan=sync" 
GRUB_DISABLE_RECOVERY="true"

正确命令

使用以下sed命令可同时解决位置错误和重复添加问题:

sed -i '/GRUB_CMDLINE_LINUX/ { /scsi_mod.scan=sync/! s/"$/ scsi_mod.scan=sync"/ }' /etc/default/grub

命令解析

  • /GRUB_CMDLINE_LINUX/:仅匹配以GRUB_CMDLINE_LINUX开头的行
  • /scsi_mod.scan=sync/!:对不包含scsi_mod.scan=sync的行执行后续替换
  • s/"$/ scsi_mod.scan=sync"/:将行尾的双引号"替换为 scsi_mod.scan=sync",把参数添加到引号内部末尾

验证效果

执行正确命令后,/etc/default/grub中GRUB_CMDLINE_LINUX行的参数会被正确放置在引号内,且不会重复添加已存在的参数。

内容的提问来源于stack exchange,提问作者Judy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 04:43:21