【问题标题】:sed command does not work when a comma is present存在逗号时 sed 命令不起作用
【发布时间】:2017-01-02 12:17:47
【问题描述】:

sed 新手,请多多包涵……

我有一个 php 文件,其中包含以下行:

define('TARGET_A','044');

我想找到该行并使用 sed 将其替换为以下内容:

define('TARGET_K','076');

我试过了:

$ sed -i 's/define\(\'TARGET_A\',\'044\'\)\;/define\(\'TARGET_K\',\'076\'\)\;/' myfile.php

我尝试了几种变体,尝试转义括号并删除分号,但似乎没有任何效果

任何帮助都非常感谢,谢谢

【问题讨论】:

    标签: unix sed command


    【解决方案1】:

    这是很多逃避。怎么样……根本不逃跑?

    sed -i '.bak' "s/define('TARGET_A','044');/define('TARGET_K','076');/" myfile.php
    

    例子:

    cternus@astarael:~⟫ cat myfile.php
    define('TARGET_A','044');
    cternus@astarael:~⟫ sed -i '.bak' "s/define('TARGET_A','044');/define('TARGET_K','076');/"  myfile.php
    cternus@astarael:~⟫ cat myfile.php
    define('TARGET_K','076');
    

    【讨论】:

    • 衷心感谢您的快速答复!我什至接受不了,你回答得这么快!哈哈!你摇滚。这有效!
    • 这是一个更棘手的问题...有没有办法自动增加数字?带或不带前导 0 存在?
    • @dsrupt 不,这不能用 sed 完成,但如果您使用 awk 而不是 sed,这将是微不足道的。这确实是一个非常不同的要求,所以发布一个带有简洁、可测试的样本输入和预期输出的后续问题,这次在上下文中显示你的目标行。
    【解决方案2】:

    这对我有用:

    $sed -i "s/define('TARGET_A','044');/define('TARGET_K','076');/" myfile.php
    

    我更改了参数字符串分隔符以使其更简单。

    【讨论】:

      【解决方案3】:

      您无法在以' 分隔的脚本中转义's,因此您需要在需要' 时使用'\'' 转义回shell。您可能很想使用 " 来分隔脚本,但随后您将其打开以进行 shell 变量扩展等,因此您需要注意脚本中的内容并转义一些字符以阻止 shell扩展它们。仅使用单引号并仅针对您需要的部分转义回 shell 会更加健壮(并且通常会使您的脚本更简单):

      $ sed 's/define('\''TARGET_A'\'','\''044'\'');/define('\''TARGET_K'\'','\''076'\'');/' file
      define('TARGET_K','076');
      

      【讨论】:

        猜你喜欢
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 2017-01-23
        • 2018-11-24
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2017-03-05
        相关资源
        最近更新 更多