find -exec sed 查找/替换为可重用字符串

find -exec sed 查找/替换为可重用字符串

我正在尝试构建一个小的 sh 脚本,它执行基本的查找/替换,但有一个小改动,我想知道我是否以错误的方式进行操作。

这里是旧弦

mysql_fetch_array($foo)

这是什么我需要

$foo->fetch_array()

现在简单的部分是:

find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(/->fetch_array(/g' {} +

但我不知道如何$foo从括号中取出,然后将其推到前面......我是否在同一个sed正则表达式中执行此操作......我是否将其存储在变量中并重建它?解决这个问题最有效的方法是什么?

我已经尝试了多种方法,但我无法逃避$等等……我的心彻底疲惫了!

编辑

应该指出的是,我需要匹配 mysql_fetch_array特别是——我很抱歉没有在OP中指定它

答案1

find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$\1->fetch_array()/' {} \;

答案2

用这个:

find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(\$foo)/\$foo->fetch_array\(\)/g' {} +

用于\转义$字符,并且在用于替换的新值中,parenthesis也必须转义。

所以,你需要使用\for()

相关内容