/boot/grub/grub.cfg
每次 grub 更新时,我都尝试在脚本中使用 sed 来修改我的 grub 配置文件()中的一行。我希望替换以下行:
menuentry "Kali GNU/Linux"
有了这个:
'menuentry "Kali GNU/Linux" --class kali'
/boot/grub/grub.cfg 中的行如下:
menuentry "Kali GNU/Linux" --class gnu-linux --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-5.14.0-kali2-amd64--7afb9c25-9d47-4ce4-a3dd-635aa0b04d7a'
基本上,我想要做的是添加行--class kali
. 我无法替换gnu-linux
或os
替换,kali
因为这些词多次出现。
我使用的脚本如下:
TARGET_STRING='menuentry "Kali GNU/Linux"'
NEW_STRING='menuentry "Kali GNU/Linux" --class kali'
sudo sed -i "s/$TARGET_STRING/$NEW_STRING/g" /boot/grub/grub.cfg
这无法正常工作,出现以下错误:
sed: -e expression #1, char 32: unknown option to `s'
我在网上找到了在这里替换包含空格的字符串并在此处替换包含双引号的字符串的解决方案,但当字符串同时包含两者时则不然。
有人可以帮我吗?
注意:我正在使用GNU sed 4.7
不需要变量。直接使用字符串:
您收到错误是因为您的字符串包含
/
并且您在运算/
符中用作分隔s///
符。不过,您可以使用任何字符,这就是我在s|||
上面使用的原因。一般来说,您需要确保选择一个不在$target_string
或中的字符$new_string
。所以|
在这个例子中有效,但你可能需要为其他情况选择另一个。如果你真的,真的想要,你可以使用变量,它们只是在这里没有帮助。此外,作为一般规则,最好避免在 shell 脚本中使用 CAPITAL 变量名。不过,这会起作用: