【问题标题】:sed and the odyssey of escaping a bash variablesed 和转义 bash 变量的奥德赛
【发布时间】:2014-09-06 19:31:32
【问题描述】:

拥有

DEST_PATH='/var/www/clones'
site='xyz.com'

sed -i -e "s/\$log_path\s=\s'\(.*\)'/\$log_path = '$DEST_PATH\/$site\/logs'/" $DEST_PATH/$site/configuration.php

问题是第一个变量中的正斜杠,因为这是正在处理的内容并返回错误:

sed -i -e "s/\$log_path\s=\s'\(.*\)'/\$log_path = '/var/www/clones\/xyz.com\/logs'/"  configuration.php

什么时候应该运行:

sed -i -e "s/\$log_path\s=\s'\(.*\)'/\$log_path = '\/var\/www\/clones\/xyz.com\/logs'/"  configuration.php

所以我知道,我可以替换 $DEST_PATH 中的所有 /,然后再次运行 sed,但我想知道您是否知道或可以想到任何其他/更好的方法。理想情况下,如果可能,可能让sed 自动转义'$DEST_PATH/$site/logs'

【问题讨论】:

    标签: linux bash variables sed escaping


    【解决方案1】:

    您是否使用了足够现代的sed 版本(例如,GNU sed)?那么您不需要使用/ 来分隔模式和替换。任何角色都可以。

    例如,你可以使用

    s,pattern,substitution,
    

    而不是

    s/pattern/substitution/
    

    【讨论】:

    • 4.2.2是我用的版本
    • GNU 版本 4.2.2?按照我在回答中的建议,继续使用,
    • 好的,试一试。感谢您的建议
    • 修复它...我错过了,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 2021-11-20
    • 2017-11-20
    • 2020-01-31
    相关资源
    最近更新 更多