我正在尝试构建一个小的 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(
和)