-1

我正在编写一个脚本,它将对包含一个短语的 php 文件进行 saech,我希望用下面的新短语替换这个短语是我的小脚本,但它不起作用它搜索正常,但不适用于搜索和替换部分

find . -type f -name "*.php" -exec grep -H "define('DB_HOST', 'localhost');" {} \; | xargs sed -i "define('DB_HOST', 'localhost');/define('DB_HOST', '10.0.0.1');/g"

有人可以向我解释我做错了什么

非常感谢

4

2 回答 2

1

您是否忘记了 sed 表达式开头的“s/”?如在

sed 's/expression1/expression2/g'

你好像有

sed 'espression1/expression2/g'

编辑

另一件事:你不需要在xarg这里使用。您可以使用多个-exec标志 - 并且只有在之前的所有标志都成功时才会使用:

find . -name '*.php' -exec grep 'whatever' {} \; -exec sed -i 's/whatever/you want/g' {} \;
于 2013-09-25T15:12:50.343 回答
0

这将起作用:

find . -type f -name "*.php" -exec grep -l "define('DB_HOST', 'localhost');" {} \; | xargs sed -i "s/define('DB_HOST', 'localhost');/define('DB_HOST', '10.0.0.1');/g"

更正

  • s/sed 搜索和替换命令中缺少

  • 使用grep -l而不是grep -H

于 2013-09-25T15:29:41.957 回答