基本的な検索/置換を行う小さなshスクリプトを作成しようとしていますが、小さなひねりを加えているので、間違った方向に進んでいるのではないかと思います。
古い文字列
mysql_fetch_array($foo)
これがi needです
$foo->fetch_array()
今簡単な部分は:
find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(/->fetch_array(/g' {} +
しかし、括弧から$foo
をプルして、それを前に押し出す方法がわかりません。同じsed
正規表現でこれを行いますか?に保存しますか?変数とそれを再構築しますか?これに対処する最も効率的な方法は何ですか?
複数のことを試しましたが、$
などのエスケープに問題があります。
[〜#〜]編集[〜#〜]
特にmatchmysql_fetch_array
も必要であったことに注意してください-OPでそれを指定しないことの悪い点
find . -type f -name "*.php" -exec sed -i -e 's/^.*mysql_fetch_array(\$\([^)]*\))/$\1->fetch_array()/' {} \;
これを使って:
find . -type f -name "*.php" -exec sed -i'' -e 's/mysql_fetch_array(\$foo)/\$foo->fetch_array\(\)/g' {} +
\
を使用して$
文字をエスケープします。置換用の新しい値では、parenthesis
もエスケープする必要があります。
したがって、\
と(
には)
を使用する必要があります