文件內容類似下面
abc.w.f.com
asdff.d.f.com
..........
我想刪除點之後的所有內容,並且更改應該在同一文件中覆蓋
abc
asdff
下面嘗試過,但這需要重定向到另一個文件,這是我不想要的
sed "s/\..*//" Filename > File2
答案1
使用-i
:
sed -i 's/\..*$//' Filename
-i[字尾], --in-place[=字尾]
就地編輯檔案(如果提供了後綴,則進行備份)
答案2
您無法重新導向到同一個檔案:明顯的問題是,在 讀取檔案之前,sed "s/\..*//" Filename > Filename
shell 會開啟以進行寫入(並覆寫它) 。Filename
sed
您需要將輸出重新導向到另一個文件,刪除原始文件,然後將新建立的文件重新命名為與原始文件相同的名稱。 Sed、Perl 和 AWK 可以為您做到這一點:
sed -i
perl -i
awk -i inplace
或者,您可以使用sponge
:
sed "s/\..*//" Filename | sponge Filename
sponge
不斷緩衝從標準輸入接收到的內容,然後才寫入Filename
.