Centos查找替换包括空格和字符串中的$

时间:2015-03-26 09:52:05

标签: search replace centos find

我需要以递归方式替换某些文件中的字符串,但我不能让它适用于我的特定字符串。

如果我使用简单的东西:

find . -type f -exec sed -i 's,functions,functions2,g' {} \;

然后这个工作正常,但如果我使用:

find . -type f -exec sed -i 's#\$name = \$_POST\['name']#\$name2 = \$_POST\['name']#g' {} \;

然后它不起作用 - 我没有抛出任何错误,文件系统显示文件已更改,因为修改日期更改但实际字符串未被替换。

是否对包含空格,$或'?的字符串有特殊考虑?我试过/和\无济于事

1 个答案:

答案 0 :(得分:0)

我最终想到了这一点 - 我用过:

find . -type f -name '*.php' -exec sed -i -e "s@\$name = \$_POST\['name']@\$name2 = \$_POST\['name']@g" '{}' \;

$和[需要转义并更改为@作为分隔符,在我的情况下使它工作。

我一直认为只要分隔符不在你的字符串中就可以找到或替换然后可以使用任何东西但是我读到@具有一些特殊含义但我找不到我现在读到的那篇SO文章。 / p>