2012-12-04 24 views
-1

我有多個html文件,我需要替換空格並在字符串內使字符串小寫。 (全部在linux)替換字符串中的空格並將其轉換爲小寫

Exaple: 
<html> .... 
<a href="bla.com/CCC C C">ddd ddd ddd</a> 
<a href="bla.com/CCC C">ddd ddd ddd</a> 
... 
</html> 

Should result in: 
<html> .... 
<a href="bla.com/ccc_c_c">ddd ddd ddd</a> 
<a href="bla.com/ccc_c">ddd ddd ddd</a> 
... 
</html> 

有類似的頁面上的其他鏈接,但他們不是bla.com他們是別的東西,所以如果使用普通EXP(bla.com需要存在)。 CCC部分不是靜態的,可以是任何單詞!

任何可以做到這一點的單線?

回答

1

我需要更換一個空間,使串小寫的字符串

內對於只有空白破那麼這一個班輪將做到這一點:

sed -E 's/(bla.com\/)(\w*)\s*(.*?")/\1\L\2_\L\3/g' file 

$ echo '<a href="bla.com/CCC C">ddd ddd ddd</a>' | sed -E 's/(bla.com\/)(\w*)\s*(.*?")/\1\L\2_\L\3/g' 
<a href="bla.com/ccc_c">ddd ddd ddd</a> 

說明:

s/   # Substitution 
(bla.com\/) # Match the domain (captured) 
(\w*)   # Match the following word (captured) 
\s*   # Followed by whitespace 
(.*?")  # Capture everything left upto the closing " 
/   # Replace with 
\1   # The captured domain 
\L\2   # Lowercase first captured word 
_    # Replace the whitespace with an underscore 
\L\3   # Lowercase rest of the match 
/g   # Global 

我難倒想出一個襯墊,如果在你的例子可能有多個空格。

+0

感謝您的回覆!你使用哪個外殼?第一個-E沒有在我的工作,所以我改變它爲-e,第二,它給了我:'s'命令的RHS上的sed:-e表達式#1,字符41:無效的引用\ 3 – Pavel

+0

'-E'是擴展正則表達式,它可能是'-r'在你執行'sed'只是做'sed --help'並尋找標誌來使用擴展正則表達式。 –

相關問題