2017-10-28 55 views
0
sed -i s/oldstr/newstr/g 

我想用目錄中的新字符串替換所有舊字符串。當我執行這個命令時,它顯示所有的字符串在控制檯上被更改爲新的字符串。但是當我輸入文件並檢查時,舊字符串仍然保持不變。請幫忙弄清楚這個問題雖然使用sed替換字符串,但更改不適用於文件

+0

歡迎來到堆棧溢出,你傳遞給了這個'sed'命令的是什麼?請輸入您的輸入文件或'* *號碼。 – RavinderSingh13

+0

根據您的sed版本,您可能需要使用'-i'選項 - 請參閱https://stackoverflow.com/questions/5694228/sed-in-place-flag-that-works-both-on-mac- bsd-and-linux ....另外,作爲一種很好的做法,在命令'sed -i.bkp's/oldstr/newstr/g''上使用單引號' – Sundeep

+0

你試過'cat file | sed -i's/oldstr/newstr/g''?使用該文件作爲參數'sed -i's/oldstr/newstr/g'文件' –

回答

0
#> sed -i \.orig 's/old/new/g' file 

這應該是一樣:

#> mv file file.orig 

#> sed 's/old/new/g' file.orig > file. 
+0

謝謝。 爲什麼sed's/old/new/g'*不會改變所有文件中的字符串(顯然sed的/ old/new/g'file.orig>文件工作正常) – Krish

+0

可能是爲了防止我們搗毀一堆文件和不得不訪問備份... d8) – JDQ

0

如果你是在MacOS上,你可以嘗試:

sed -i '' 's/oldstr/newstr/g' your-file 

從男人:

就地編輯文件,使用指定的擴展名保存備份。如果給定零長度擴展,則不會保存備份。

因此,通過使用-i ''它不會創建備份並將更改應用到您的文件。

保持這可能是用來備份:

sed -i.bak 's/oldstr/newstr/g' your-file 

要更換多個文件oldstr,你可以這樣做:

perl -pi -e 's/oldstr/newstr/g' * 

保留的備份:

perl -i.bak -p -e 's/oldstr/newstr/g' *