給出的前導正則表達式錯誤無效我是一個管理很多網站的輪換團隊的一員,我們繼承了一些特別糟糕的代碼,我們正在完全重新設計一個網站。可怕的是,開發服務器上存在一些鏈接,可將您引導至活動服務器和舊域以及許多其他可怕,可怕的事情。sed
我一直在試圖編寫一個grep/sed命令來替換所有這些鏈接,我們現在使用用戶定義的php函數full_link來阻止所有鏈接到不同的地方。因此(使用我們的域的佔位符)而不是編寫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 "[email protected](?<=<a href=['\"])(http://foo\.bar\.net/|10\.41\.6\.118/|http://foo2\.bar\.net/)([^<]*?)(?=['\"])@<?php echo full_link('\2'); ?>@gpw output"
(如果你想知道關於第一的grep或[^<]
,他們都只是一個基本的企圖保持從把php標記現有的PHP標籤內自。這只是第一次讓手動編輯少了完整的複製粘貼鏈接並重定向到錯誤的服務器,它不需要是完美的,但我打開更好的方式來做到這一點。)
I我已經得到了grep的聲明,並拿起了我想讓他們得到的東西,但是當我將sed添加到最後時,會發生什麼情況:
sed: -e expression #1, char 159: Invalid preceding regular expression
從我做了什麼研究,好像我可能逃過我的sed的聲明不正確的東西,我已經嘗試了一些東西,但它永遠只給我指向一個相同的消息表達式的最後幾個字符。
取代這種事情通常是用Perl – leonbloy 2013-04-26 00:29:03