SEDコマンドは置き換えられません(正規表現操作)

SEDコマンドは置き換えられません(正規表現操作)

すべて交換しようとしていますmysqlからmysqliへ、および対応するパラメータです。これを行うには、フォルダ内のmysqlを含むすべてのファイルを再帰的に検索してmysqliに置き換えます。

前任者:

mysql_query($query) を mysqli_query($link, $query)

(正規表現テスターに​​よると)すべてをキャッチすることができますが、何も交換されていないようで、エラーもありません。

grep -rl mysql PROJECTFILE | xargs sed -ri "s/(mysql_query)\(\$([\w-]+)\)/WhatIWant/g"

バックスラッシュについて読んだ。sedただし、出力にエラーはありませんが、ファイルは変更されずに残ります。例や説明で何が欠けているのかを知ることができれば、これはないでしょう。

mysqlをmysqliに置き換えるのは簡単ですが、すべての操作を一度に実行するのが最善です。私のプロジェクトで試す前に動作していることを確認するために一時ファイルを使用しています。

ありがとうございます。

編集する:一度にやるにはキャプチャをしなければならないことがわかりました。mysql一人で追加しかし、これは単なるアイデアです。


tedronの場合、私が望む出力は次のようになります。

sed -ri "s/(mysql_query)\(\$([\w-]+)\)/mysqli_query($link, \2)/g" filename

Glennは、キャプチャを必要としないソリューションを思い出しました。しかし、修正したい場合mysql_fetch_array($クエリ)、最初のパラメータを保持して追加するには、正規表現を使用する必要があります。MYSQLI_BOTH例えば。


解決策:

tedronのおかげで、私は私の問題を私がした方法で解決することができました:

sed -ri 's/(mysql)_query\((\$[a-zA-Z_-]+)\)/\1i_query($link, \2)/' filename

mysqli_fetch_arrayの場合:

sed -ri 's/(mysql)(_fetch_array)\((\$[a-zA-Z_-]+)\)/\1i\2(\3, MYSQLI_BOTH)/' filename

質問で述べたように、それを使用してディレクトリを即座に変更しますgrep

ベストアンサー1

何もキャプチャする必要はありません。

sed 's/mysql_query(/mysqli_query($link, /g' file

-iテスト中は使用しないでください。結果が満足のいくものを追加してください。

おすすめ記事