これを目的として、正規表現をより適切に機能するように簡素化しますが、実際のコードでテストしていないため、間違っている可能性があります。
コードのベースディレクトリに座っているとしましょう。次から始めることができます。
find . -iname "*.php" -print0
これにより、NULL 文字で区切られたすべての .php ファイルが取得されます。これは、ファイルにスペースが含まれている場合に必要です。
find . -iname "*.php" -print0 | xargs -0 -I{} sed -n 's/\(<\?\)\([^a-zA-Z]\)/\1php\2/gp' '{}'
これで、ほとんどの場合に到達するはずです。すべてのファイルが検出され、それぞれに対して sed を実行してコードを置き換えます。ただし、-i タグ (以下で使用) がないと、これは実際にはファイルに影響を与えず、コードを端末に送信するだけです。-n は通常の出力を抑制し、正規表現部分の後の p は、変更された行のみを出力するように指示します。
結果が正しい場合は、ファイルをその場で置き換えるという大きな一歩を踏み出します。これを試みる前に、必ずすべてのファイルをバックアップする必要があります!!!
find . -iname "*.php" -print0 | xargs -0 -I{} sed -i 's/\(<\?\)\([^a-zA-Z]\)/\1php\2/g' '{}'
それは仕事を成し遂げるはずです。残念ながら、私はその構文を使用する PHP ファイルを持っていません。したがって、ここから理解するのはあなた自身です。
- 「検索」ですべてのファイルを取得します
- そのファイルのリストを「xargs」に送信します(一度に1つずつファイルに対してコマンドを実行します
- 「sed」と構文「s/to-change/changed/」を使用して、正規表現の魔法を機能させましょう!