2012-06-07 92 views
2

我有一個包含這個<!-- CordovaVersion --> 我想<script src="cordova-1.7.0.js" type="text/javascript"></script>搜索和替換HTML標籤(用斜槓)的sed

我試圖

sed 's/"<!-- CordovaVersion -->"/"<script src="cordova-1.7.0.js" type="text/javascript"></script>"/g' junk4 > junk4_modified 

來取代它一個文件,但它似乎沒有不工作。請幫忙嗎?

回答

4

使用其他一些字符,如作爲分隔符而不是/

sed 's#<!-- CordovaVersion -->#<script src="cordova-1.7.0.js" type="text/javascript"></script>#g' junk4 > junk4_modified 
+0

謝謝!它的工作 – Glove

1

sed 's/<!--\s*CordovaVersion\s*-->/<script src="cordova-1.7.0.js" type="text\/javascript"><\/script>/g' junk4 > junk4_modified

+0

thnks它的工作呢! – Glove

1

這一行的sed將搜索"<!-- CordovaVersion -->",並嘗試與<script src="cordova-1.7.0.js" type="text/javascript"></script>"來取代它。但是您的原始文檔不包含"。只需從sed命令中刪除它們即可。

2

首先,你不需要額外的" s作爲LiKao說。其次,你需要知道SED如何理解什麼得到什麼取代:

s/this/that/flags 

這意味着that與其他標誌替換this(例如g意味着無處不在)。事實上/不是特殊字符,你可以使用任何其他如#scai說:

s#this#that#flags 

但究竟是什麼問題呢?想象一下,你想用th/at代替this。然後sed看到這個:

s/this/th/at/flags 

並得到正確的困惑。您是否試圖用th替換this?比at/flags是什麼意思?您是否試圖用at替換this/th?或者是thisth/at?沒有辦法告訴。

這就是爲什麼你應該跳過特殊字符\。因爲我們使用的/作爲分隔符,那麼我們要逃避它時,它不是一個分隔符:

sed 's/<!-- CordovaVersion -->/<script src="cordova-1.7.0.js" type="text\/javascript"><\/script>/g' junk4 > junk4_modified 

(當然,如果我們使用#和內部thisthat有一個#你應該已經逃出#

有關sed的更多信息,包括其特殊字符,您可以閱讀here

+0

謝謝!我現在明白了 – Glove