2014-10-22 48 views
1

我是bash腳本的新手,我試圖編寫一個bash腳本來編輯配置文件。我想從文件中刪除「foo」。一行bash腳本編輯文件(不是創建一個新的)

使用代碼

echo 
sed -e "s/ foo//" ./test > ./test2 

將創建一個我想要的內容的新文件。但如果我嘗試使用此編輯相同的文件

echo 
sed -e "s/ foo//" ./test > ./test 

該文件將只是變空。這不是這樣嗎?我怎樣才能簡單地編輯一個文件?謝謝。

回答

2

這是-i開關是什麼:編輯就地:

sed -i -e "s/ foo//" ./test 

-i開關在man sed記載:

-i [後綴],--in位置[=後綴]
編輯文件到位(使備份,如果擴展提供)

對於GNU sed(linux),省略後綴時不會創建備份。對於sed的其他版本,可能必須提供備份後綴。

+0

It Works!謝謝 – 2014-10-22 04:18:23

1

空文件

殼牌打開文件test寫作 - >清除其所有以前的內容。

如何編輯同一文件

解決方案1: - 直列變化

sed -i.bk "s/ foo//" ./test 

解決方案2: - 使用中間文件(以前CMD的手動版本)

sed -e "s/ foo//" ./test > test.bk && mv test.bk test 
+0

啊我明白了。 :D謝謝! – 2014-10-22 04:18:57

1

桑達是一個編輯器,不是文本編輯器。使用'-i'參數不是POSIX,再加上在替換原始文件之前創建臨時文件的開銷。

如果你想真正地編輯你的文件,你應該使用ed/ex來代替。

ex -sc '%s/ foo//g|xit' ./test 

請參見手冊頁sed(1p),ed(1p)和ex(1p)。

相關問題