find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$->fetch_array()/' {} \;
Estou tentando construir um pequeno script sh que faça um achado / substituição básico, mas com uma pequena reviravolta, que eu me pergunte se estou indo de uma maneira errada.
aqui está a string antiga
mysql_fetch_array($foo)
aqui é o que eu preciso
$foo->fetch_array()
agora a parte fácil é:
find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(/->fetch_array(/g' {} +
Mas eu não sei como puxar $foo
dos parantheses, e então enfiar na frente ... Eu faço isso no mesmo sed
regex .. Eu guardo em uma variável e reconstruí-lo? Qual é a maneira mais eficiente de fazer isso?
Eu tentei várias coisas, mas estou tendo problemas para escapar do $
etc etc ... Minha mente está completamente exausta!
EDITAR
Deve-se notar que eu estava precisando emparelhar mysql_fetch_array
especificamente - bem ruim por não especificá-lo no OP
Use isto:
find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(\$foo)/\$foo->fetch_array\(\)/g' {} +
Use \
para escapar do caractere $
e, no novo valor para substituição, parenthesis
também deve ter escapado.
Então, você precisa usar \
para (
e )