我想在以
scsi_mod.scan=sync
开头的行的末尾添加文本 GRUB_CMDLINE_LINUX
,并将文本附加到行尾但在字符 "
之前。
如果
scsi_mod.scan=sync
已存在,则 sed
不应附加额外的 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"
使用 GNU
sed
,你可以尝试:
sed -i '/GRUB_CMDLINE_LINUX/{/scsi_mod.scan=sync"$/!s/"$/ scsi_mod.scan=sync"/}' /etc/default/grub
如果您想跳过添加,即使现有的
scsi_mod.scan=sync
位于行中的任何位置,而不仅仅是在末尾:
sed -i '/GRUB_CMDLINE_LINUX/{/\<scsi_mod.scan=sync\>/!s/"$/ scsi_mod.scan=sync"/}' /etc/default/grub
使用 $ 替换结尾双引号“$ with scsi_mod.scan=sync”。还确保在右双引号之前添加 scsi_mod.scan=sync。
您的命令应该是::
sed -i '/GRUB_CMDLINE_LINUX/s/"$/ scsi_mod.scan=sync"/' demofile
这将起到 Charm 的作用,请确保根据您的情况更改文件名。