Chr*_*mus 5 linux bash shell hibernate sed
我正在编写一个 bash 脚本以在 Linux 系统上以非交互方式启用休眠。为此,我需要在该行的引号内插入一个包含斜线的 shell 变量。
要编辑的文件的相关部分如下所示:
GRUB_DEFAULT=0
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
Run Code Online (Sandbox Code Playgroud)
我需要把它改成这样:
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=""
Run Code Online (Sandbox Code Playgroud)
添加的参数由 shell 变量提供。
我试过这个:
sed -i '\*^GRUB_CMDLINE_LINUX_DEFAULT* s*"$* '"$(grub_resume_boot_option)"'"*' /etc/default/grub
Run Code Online (Sandbox Code Playgroud)
我的目标逻辑是:“查找以模式“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
Run Code Online (Sandbox Code Playgroud)
例子:
$ 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"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |