2010-10-07 125 views
0

在bash腳本中,我有以下sed -e 's/<em\:update.*//g' install.rdf > install.rdf,它在命令行上工作,但是在bash腳本中,install.rdf結束了一個空白文件。使用sed替換文件的內容在bash腳本中不起作用

當我運行sed -e 's/<em\:update.*//g' install.rdf > install.rdf命令行時,則會從文件中剝離出2行。

任何想法爲什麼sed -e 's/<em\:update.*//g' install.rdf > install.rdf不在bash腳本中工作?

+0

UNIX和'sed'的版本,你有什麼? – 2010-10-08 00:00:50

回答

6

試試這個:

sed -i -e 's/<em\:update.*//g' install.rdf 

當您重定向輸出到截斷模式的文件,該文件第一截斷,它的讀取之前。因此,結果是一個空文件。使用sed -i避免了這一點。

便攜式(希望不要太不安全)解決方案:

(set -C && 
sed -e 's/<em\:update.*//g' install.rdf > install.rdf.$$ && 
mv install.rdf.$$ install.rdf) 

:-)

+3

但是,'-i'是一個GNU擴展。 – 2010-10-08 00:03:34

+1

@Matthew:謝謝!用一些更一般的東西來解決答案(儘管如果目錄可被惡意方寫入,則不安全)。 – 2010-10-08 00:05:31

+2

shell變量$$通常用於避免共享名稱問題的非惡意環境:'sed ... install.rdf> install.rdf。$$; mv install.rdf。$$ install.rdf'。 – 2010-10-08 00:21:32