3

私は、多くの Web サイトを管理するローテーション チームの一員です。完全に再設計している Web サイトの特に悪いコードをいくつか継承しました。恐ろしいことに、開発サーバーには、ライブサーバーや古いドメイン、その他多くの恐ろしい、恐ろしいものにつながるリンクがあります.

私は grep/sed コマンドを作成して、これらすべてのリンクをユーザー定義の php 関数 full_link に置き換えて、さまざまな場所へのすべてのリンクを防ぐために現在 Web サイト全体で使用しています。したがって、(ドメインのプレースホルダーを使用して)を書く代わりにhttp://www.place.com/foo/bar、あなたが書く<?php echo full_link('foo/bar'); ?>と、あるサーバーから別のサーバーに移動するときに機能します。

これが私が得たものです:

grep -v 'echo' * -r -P | grep "(?<=<a href=['\"])(http:\/\/foo\.bar\.net\/|10\.41\.6\.118\/|http:\/\/foo2\.bar\.net\/)([^<]*?)(?=['\"])" -P | sed -r "s@(?<=<a href=['\"])(http://foo\.bar\.net/|10\.41\.6\.118/|http://foo2\.bar\.net/)([^<]*?)(?=['\"])@<?php echo full_link('\2'); ?>@gpw output"

(最初の grep や[^<].間違ったサーバーにリダイレクトされた場合、完璧である必要はありませんが、私はそれを行うためのより良い方法を受け入れています.)

grep ステートメントが機能し、取得したいものを取得しましたが、最後に sed を追加すると、次のようになります。

sed: -e expression #1, char 159: Invalid preceding regular expression

私が行った調査から、おそらくsedステートメントで何かを誤ってエスケープしたようで、多くのことを試しましたが、最後の数文字の1つを指す同じメッセージしか表示されません表現。

4

1 に答える 1