刪除點後的所有內容並在同一文件中覆蓋

刪除點後的所有內容並在同一文件中覆蓋

文件內容類似下面

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 > Filenameshell 會開啟以進行寫入(並覆寫它) 。Filenamesed

您需要將輸出重新導向到另一個文件,刪除原始文件,然後將新建立的文件重新命名為與原始文件相同的名稱。 Sed、Perl 和 AWK 可以為您做到這一點:

  • sed -i
  • perl -i
  • awk -i inplace

或者,您可以使用sponge

  • sed "s/\..*//" Filename | sponge Filename

sponge不斷緩衝從標準輸入接收到的內容,然後才寫入Filename.

相關內容