2013-05-15 18 views
0

我想運行一個腳本,改變了HTML代碼行更換一次線(可能發生變化),這表明當上次更新。因此,舉例來說,我也行使用sed的另一個

<d>This page was last updated on 29.04.2013 at 00:34 UTC</d>

,我現在正在更新,所以我想更換符合

<d>This page was last updated on 15.05.2013 at 15:50 UTC</d>

這是我的源代碼中唯一的一行有<d>標籤,所以希望這有助於。我已經有一個生成與當前日期和時間新的字符串一些代碼,但我不能想出一個辦法來取代舊的(其改變,所以我不知道究竟它是什麼)。

我試過在上一行中放入註釋<!--date-->,刪除整行<d>(與grep),然後在新字符串註釋之後添加一行,但是失敗。例如,如果我想只需要插入註釋後面的字符串text,並使用

sed -i 's/<!--date-->/<!--date-->text/' file.html

我得到invalid command code j。我認爲這可能是因爲在字符串中有一些特殊字符,如<,!>,但是如果我想在上面輸入日期字符串,我將會有更多,如:/。感謝有關如何解決此問題的任何想法。

+0

不管你信不信,我認爲問題在於你正在使用'csh'或者其他一些正在嘗試在單引號內的'!'上進行歷史擴展的shell。嘗試使用不同的shell。 –

回答

1

這將改變文本只有在包含<d>行:

sed -i.bak "/<d>/s/on .* at [^<]*/on newdate at newtime/" file.html 

我測試過這與BSD sed中附帶的MacOS X 10.8.3

+0

完美。也創建'.bak'文件,但這並不重要。 –

+0

因爲沒有那個bak文件,我被咬了幾次,所以我沒有想到就把它放進去了。你當然可以刪除它。 – chthonicdaemon

0

當使用命令行,試圖逃避特殊字符是這樣的:
! ===>\!

+0

沒有骰子。同樣的錯誤,只用於'!'或'!','<', and '>'。 –

1

你不需要你< - 約會 - >劈!您可以使用正則表達式和另一個分隔符,除了「/」,在您的sed命令:

sed -i.bak '[email protected]<d>This page was last updated on.*</d>@<d>This page was last updated on 12.05.2013 at 00:38 UTC</d>@' whatever.html 

或者,如果你有更新的一個變量,名爲$替換:

sed -i.bak "[email protected]<d>This page was last updated on.*</d>@[email protected]" whatever.html 
+0

不論在這兩種情況下,使用'bash'還是'sh',我都會得到相同的錯誤。我應該提到我正在運行Mac OS 10.7.5 –

+0

嗯......在我的Linux機器上運行bash,csh和zsh ...對不起,我不知道! –

+0

好的,看[this](https://github.com/bergie/create/pull/119)...你需要在你的-i ... -i.bak或其他地方使用「備份」擴展名。 –

相關問題