存在逗号时 sed 命令不起作用

sed command does not work when a comma is present

sed 新手,请多多包涵...

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

define('TARGET_A','044');

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

define('TARGET_K','076');

我试过:

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

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

非常感谢任何帮助,谢谢

那是很多转义。怎么样……完全没有逃脱?

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');

这对我有用:

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

我更改了参数字符串定界符以使其更简单。

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

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