2013-10-21 73 views
0

我有一個包含這樣一行HTML文件:複雜的字符串替換

base_url = '', 

有時可出現單引號之間沒有任何東西;有時可能會有一個網址。我該如何編寫單行perl命令來填充帶有基本url的字符串?

我嘗試這樣做,但它不工作:

perl -pe 's/(base_url = \')(.+)/https:\/\/www\.example\.com(\',)/eg' -i index.htm 

感謝

+0

嘗試使用這個正則表達式:?'/ BASE_URL = '([^'] +)'/' –

+0

@IlyaBursov'*'要優於'[^ '] *'(是的,它是'*'不是'+',因爲它可以是零長度的)。 –

+0

@ ChrisJester-Young你是對的 –

回答

3

試試這個:

s|base_url = '.*?',|base_url = 'https://www.example.com/',|g; 
+0

完美答案!謝謝! – jacob

-1

你問一個班輪,但沒有說你正在使用的shell。這很重要。我會假設bash。這是一種方式:

perl -p -e 's#(base_url *= *)'"'"'.*'"'"'#$1'"'"'https://www.example.com/'"'"'#' 

正如您所看到的,最難的部分是在單引號內轉義單引號。可能有一個更簡單的方法來做到這一點,但我不知道那是什麼。

有些人似乎不喜歡單引號約定中的單引號轉義。我喜歡它,因爲你不必擔心任何進一步的shell逃脫。下面是用雙引號答案:

perl -p -e "s#(base_url *= *)'.*'#\$1'https://www.example.com/'#" 
+0

在bash中,你可以使用''''與Perl單行程式 – TLP

+0

@TLP雙引號試圖展開$和其他shell元字符,所以它有它自己的問題 – Gene

+3

我想我更喜歡使用反斜槓而不是'' 「'''''但是你不需要這個,只需要使用'\ K'而且你不能同時使用'-n'和'-p'。 – TLP