find -exec sed para localizar / substituir com string reutilizável

3

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

    
por Zak 17.02.2017 / 22:29

2 respostas

4
find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$->fetch_array()/' {} \;
    
por 17.02.2017 / 22:40
0

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 )

    
por 17.02.2017 / 22:39

Tags