2011-10-13 94 views
0

當我嘗試更換一個網址時,出現以下錯誤消息?在給定目錄中的所有文件中替換URL的有效方法是什麼?使用shell腳本替換網址

sed: -e expression #1, char 62: unknown option to `s' 

find . -name '*' | xargs sed -i 's/old_url/new_url/g'沒有工作

回答

2

這裏有一個辦法做到這一點在Perl。

cd directory 
perl -pi -e 's!old_url!new_url!g;' * 
+0

在命令行中試過也無法打開perl腳本「s/http:old_url/http:// new_url /」:沒有這樣的文件或目錄 – sharp

+6

使用另一個分隔符的'///'可能會是使用網址時好主意。 – TLP

+1

@sharp,你沒有使用'-e'如果你有這個 – ikegami

1

或者使用find在你原來的問題:

find . -type f -exec perl -pi -e 's{old_url}{new_url}g' {} + 

如果Perl是在告訴你「沒有這樣的文件或目錄,」這可能是因爲你無意中省略-e

編輯:由於TLP指出您正在使用網址,因此將s///g s更改爲s{}{}g

編輯:更改\;+每ikegami的建議。

+2

提示:將'\;'改爲'+'以避免啓動如此多的'perl'實例。 (需要GNU'find'。) – ikegami

+0

@ikegami優秀的技巧,+1和謝謝。我從未聽說過多年的UNIX經驗和無數'find'命令。 (也許是因爲我主要使用Solaris?) – MisterEd

+0

不是,剛剛檢查了Solaris的man頁面「find」,並且在那裏顯示爲白天。與往常一樣,RTFM ... – MisterEd

8

最根本的問題是可能是你指定如

s/http://example.com/ick/poo/http://example.net/also/not/ 

這不是一個有效的sedperl腳本,顯然頗爲曖昧的東西。使用不在正則表達式或替換中任何位置的備用分隔符;一個流行的選擇是!

s!http://example.com/ick/poo!http://example.net/also/not! 

這兩個sedperl有效。

編輯到@TLP的榮譽也可以在評論中對此進行診斷。如果您發佈了類似的信息,我會刪除此答案。

+0

我對這些榮譽感到滿意。好答案。 – TLP