2016-01-19 37 views
2

如果以前已經覆蓋過此內容,我抱歉但沒有找到任何內容。我意識到這可能是一個簡單的錯誤,但我目前正在學習UNIX。在sed中替換不會更改文件

我一直在試圖做一個sed替換,但每次我試過命令只是似乎打印出來的文件,而不是替代任何東西?

的命令問題是:

find . -name 'config.xml' -exec sed 's/<name>development<\/name>/<name>releases<\/name>/g' {} \; 

後,我運行此命令,如果我試圖找到和grep爲<name>development<\/name>仍然會返回結果。爲什麼?

任何幫助,將不勝感激!謝謝。

+0

使用此命令:find。 -name'config.xml'-exec sed -i -e's/ development <\/name>/ releases <\/name>/g'{} \; –

回答

2

這是因爲你實際上沒有編輯文件 - 只是將編輯後的版本打印到stdout。用sed的-i標誌:

-i[SUFFIX]
--in-place[=SUFFIX]
此選項指定文件是就地進行編輯。 (1)。GNU sed通過創建一個臨時文件並將輸出發送到 這個文件而不是標準輸出來做到這一點。

所以:

find . -name 'config.xml' -exec sed -i 's/<name>development<\/name>/<name>releases<\/name>/g' {} \; 

你也可以使用一個不同的角色,除了/,如果你不希望有逃脫他們:

find . -name 'config.xml' -exec sed -i '[email protected]<name>development</name>@<name>releases</name>@g' {} \; 
+1

謝謝!非常感激。 – Tentatively

+0

沒問題,樂於幫忙! :) – Will