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

如何用sed替换含斜杠的systemd服务配置行内容?

修改systemd服务脚本的sed命令解决方案

需求说明

现有如下systemd服务脚本:

[Unit]
Description=Serial Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)

Type=idle
Restart=always
UtmpIdentifier=%I
ExecStart=-/sbin/agetty -o '-p -- \u' --keep-baud 115200,38400,9600 %I $TERM

需要将其中的ExecStart=-/sbin/agetty -o '-p -- \u' --keep-baud 115200,38400,9600 %I $TERM行替换为:

ExecStart=-/sbin/agetty 9600 %I $TERM

原命令问题

尝试的sed命令因搜索字符串包含斜杠/,而sed默认以/作为分隔符,导致命令解析失败:

sed -i 's/ExecStart=-/sbin/agetty -o '-p -- \u' --keep-baud 110200,38900,9680 %I $TERM/ExecStart=-/sbin/agetty 9600 %I $TERM/g'

解决方法

方法1:更换sed分隔符

选择字符串中未出现的字符(如#)作为分隔符,避免与/冲突,同时正确转义单引号和反斜杠:

sed -i 's#ExecStart=-/sbin/agetty -o '\''-p -- \\u'\'' --keep-baud 115200,38400,9600 %I $TERM#ExecStart=-/sbin/agetty 9600 %I $TERM#g' /path/to/your/service/file.service
  • 用#替代默认的/作为分隔符
  • 原字符串中的单引号'需转义为'\''(在单引号包裹的sed命令中,通过'结束当前单引号段,用\'转义单引号,再用'重新开启单引号段)
  • 原字符串中的\u需转义为\\u,避免被sed解析为特殊字符

方法2:转义搜索字符串中的斜杠

如果坚持使用/作为分隔符,需将所有/转义为\/,同时处理单引号和$符号:

sed -i "s/ExecStart=-\/sbin\/agetty -o '-p -- \\u' --keep-baud 115200,38400,9600 %I \$TERM/ExecStart=-\/sbin\/agetty 9600 %I \$TERM/g" /path/to/your/service/file.service
  • 用双引号包裹sed命令,便于转义$TERM中的$为\$
  • 所有/转义为\/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:59:52