我是bash腳本的新手,我試圖編寫一個bash腳本來編輯配置文件。我想從文件中刪除「foo」。一行bash腳本編輯文件(不是創建一個新的)
使用代碼
echo
sed -e "s/ foo//" ./test > ./test2
將創建一個我想要的內容的新文件。但如果我嘗試使用此編輯相同的文件
echo
sed -e "s/ foo//" ./test > ./test
該文件將只是變空。這不是這樣嗎?我怎樣才能簡單地編輯一個文件?謝謝。
我是bash腳本的新手,我試圖編寫一個bash腳本來編輯配置文件。我想從文件中刪除「foo」。一行bash腳本編輯文件(不是創建一個新的)
使用代碼
echo
sed -e "s/ foo//" ./test > ./test2
將創建一個我想要的內容的新文件。但如果我嘗試使用此編輯相同的文件
echo
sed -e "s/ foo//" ./test > ./test
該文件將只是變空。這不是這樣嗎?我怎樣才能簡單地編輯一個文件?謝謝。
這是-i
開關是什麼:編輯就地:
sed -i -e "s/ foo//" ./test
的-i
開關在man sed
記載:
-i [後綴],--in位置[=後綴]
編輯文件到位(使備份,如果擴展提供)
對於GNU sed
(linux),省略後綴時不會創建備份。對於sed
的其他版本,可能必須提供備份後綴。
空文件
殼牌打開文件test
寫作 - >清除其所有以前的內容。
如何編輯同一文件
解決方案1: - 直列變化
sed -i.bk "s/ foo//" ./test
解決方案2: - 使用中間文件(以前CMD的手動版本)
sed -e "s/ foo//" ./test > test.bk && mv test.bk test
啊我明白了。 :D謝謝! – 2014-10-22 04:18:57
桑達是一個編輯器,不是文本編輯器。使用'-i'參數不是POSIX,再加上在替換原始文件之前創建臨時文件的開銷。
如果你想真正地編輯你的文件,你應該使用ed/ex來代替。
ex -sc '%s/ foo//g|xit' ./test
請參見手冊頁sed(1p),ed(1p)和ex(1p)。
It Works!謝謝 – 2014-10-22 04:18:23