【问题标题】:sed replace command inside of a bash script?bash 脚本中的 sed 替换命令?
【发布时间】:2010-11-29 03:18:42
【问题描述】:

我在替换脚本中的命令时遇到问题,脚本中的违规行如下所示:

mail -s "$(hostname) on $(date)"

应该换成这样的一行:

nail -r "sender@domain.com" -s "Subject" -S smtp=255.255.255.255

但我无法让 sed 进行替换 :) 我为此编写了一个小脚本:

#!/bin/bash

old="mail -s \"\$(hostname) on \$(date)"
new="nail -r \"sender@domain.com\" -s \"Subject\" -S smtp=255.255.255.255"

sed -i 's|$old|$new|' script.sh

有人有什么建议吗?

【问题讨论】:

    标签: bash scripting sed


    【解决方案1】:
    sed -i "s|$old|$new|" script.sh
    

    注意双引号。

    【讨论】:

    • 感谢您指出这个愚蠢的错误 :) 我一直在使用 sed 在需要的地方替换和附加双引号,并且厌倦了一直转义它们,所以我开始使用单引号忘了它:)
    【解决方案2】:

    默认情况下,Sed 不进行原地编辑。如果您使用的是 gnu Sed,请尝试提供就地标志 -ikbak

    【讨论】:

    • OP 有 -i 选项。唯一的区别是您的备份会导致创建带有(不寻常的?)后缀“kbak”的备份。
    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 2017-09-06
      • 1970-01-01
      • 2018-05-24
      • 2014-08-23
      • 2013-12-07
      • 2022-07-21
      • 1970-01-01
      相关资源
      最近更新 更多