linux - 用 sed 给 grub 添加一个内核参数

标签 linux bash hibernate shell sed

我正在编写一个 bash 脚本以非交互方式在 Linux 系统上启用 hibernate 。为此,我需要插入一个 shell 变量,该变量在一段时间的特定行上包含斜杠,在该行的引号内。

要编辑的文件的相关部分如下所示:

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""

我需要把它改成这样:

GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"
GRUB_CMDLINE_LINUX=""

添加的参数由 shell 变量提供。

我试过这个:

sed -i '\*^GRUB_CMDLINE_LINUX_DEFAULT* s*"$* '"$(grub_resume_boot_option)"'"*' /etc/default/grub

我的目标逻辑是:“寻找以模式“GRUB_CMDLINE_LINUX_DEFAULT”开头的行,并用给定模式替换最后一个“。使用 * 作为分隔符以保留扩展变量中的斜杠。”

但是,如果行尾有任何空格,命令将失败。有什么方法可以让它不考虑行尾的空格吗?

此外,如果有更简单或可读的解决方案,我会非常感兴趣。

最佳答案

你可以这样做:

sed -i 's#^\(GRUB_CMDLINE_LINUX_DEFAULT="quiet\)"$#\1 resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"#' /etc/default/grub

示例:

$ sed 's#^\(GRUB_CMDLINE_LINUX_DEFAULT="quiet\)"$#\1 resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"#' <<<'GRUB_CMDLINE_LINUX_DEFAULT="quiet"'
GRUB_CMDLINE_LINUX_DEFAULT="quiet resume=/dev/disk/by-partuuid/c5a552c2-fe8f-423a-9037-c35bf090d9c3"

关于linux - 用 sed 给 grub 添加一个内核参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36853711/

相关文章:

arrays - 从文本文件逐行读取并输出到数组 bash

linux - Linux 和 RTOS 之间的处理器间通信

linux tasklets - 执行顺序

bash - 从 groovy 打印 $PATH - 字符被转义?

java - 在 JPA 查询上设置 ORDER BY 和 LIMIT 子句

php - Linux 是否缓存(小)文件以优化 I/O?

Linux/bash 解析文本输出,选择字段,仅忽略一个字段中的空值

bash - 使用 bash 打开新的控制台/lxterminal 窗口 - Raspbian Jessie Lite

java - 从 ManyToMany 链接对象派生属性

java - Hibernate中复合ID如何映射Key类