Câu hỏi Làm thế nào để xóa nội dung của một tập tin từ dòng lệnh?


Tôi có một tệp nhật ký có nhiều thứ trong đó mà tôi không cần nữa. Tôi muốn xóa nội dung.

Tôi biết cách in nội dung lên màn hình:

cat file.log

Tôi biết cách chỉnh sửa tệp, từng dòng:

nano file.log

Nhưng tôi không muốn xóa từng dòng một. Có cách nào để làm điều đó trong một lệnh mà không phá hủy các tập tin để làm điều đó?


230
2018-01-01 01:50


gốc




Các câu trả lời:


Trong bash, chỉ

> filename

sẽ làm.

Điều này sẽ để lại cho bạn một tệp trống tên tệp.

p.s.

Nếu bạn cần sudo gọi, hãy cân nhắc sử dụng truncate như đã trả lời ở đây.


392
2018-01-01 10:20



Đây có lẽ là lệnh raddest trong lịch sử máy tính - blarg
Ngược lại, @ Arekkusandaa.Irujasukin; nó hoạt động tốt trong mọi phiên bản của Windows, miễn là, như đã đề cập, bạn đang sử dụng bash làm vỏ của bạn chứ không phải e. g. cmd.exe hoặc PowerShell, cả hai đều không đủ POSIXy để được dự kiến ​​xử lý những thứ như vậy. - DopeGhoti


Bạn có thể sử dụng lệnh người dùng: cắt ngắn

truncate -s 0 test.txt

("-s 0" để chỉ định kích thước)

http://www.commandlinefu.com/commands/view/12/empty-a-file


80
2017-08-20 14:21



Câu trả lời hay nhất xung quanh, hoạt động khi bạn không phải root (với sudo) - sudo echo > file chỉ đưa ra một lỗi trong những trường hợp như vậy. - Dmitry Verkhoturov
@DmitryVerkhoturov: sudo bash -c '> filename' là cách bạn sử dụng các giải pháp Bash với sudo. - Stuart P. Bentley
brew install truncate trên os x với homebrew được cài đặt. - xaxxon


Bạn có thể làm điều này:

echo -n "" > file.log

Sử dụng > để viết đầu vào (null) từ echo -n vào tệp.

Sử dụng >> sẽ nối thêm đầu vào null vào tệp (có hiệu quả không làm gì ngoài touching nó).


32
2018-01-01 01:55



Điều này sẽ để lại một không gian trong đó. - dmckee
Tôi nhận được điều này: -bash:: không tìm thấy lệnh - Andrew
echo ""> vẫn sẽ cung cấp cho bạn một tệp có một ký tự (một dòng mới.) Nếu bạn muốn sử dụng echo, hãy sử dụng "echo -n> file.log" để echo null. - Dave Forgac
Sẽ tốt hơn nếu sử dụng một lệnh null-output chuyên dụng như true (hoặc bí danh nội trang của nó :), mặc dù cuối cùng bạn không cần một lệnh nào cả (xem câu trả lời được chấp nhận). - Stuart P. Bentley
làm việc tốt với Mac, cảm ơn - AMIC MING


: > file.log

Giống như > filename trong Bash, nhưng hoạt động trong nhiều shell hơn (tín dụng). Chuyển hướng đầu ra từ true nội trang (không có đầu ra) filename.


22
2017-07-25 22:51



Tôi đến để làm cho câu trả lời này, nhưng alas nó đã ở đây ... Hãy một upvote. - Aaron Hall
Cứ làm đi :> filename. Nó không giống như một nụ cười? :> - minmaxavg


ZSH

>! filename

ZSH sẽ bảo vệ người dùng khỏi các tập tin clobbering bằng cách sử dụng toán tử chuyển hướng io >. Nếu bạn dùng >! bạn có thể buộc việc cắt bớt một tệp hiện có.

Nếu bạn muốn ZSH sử dụng hành vi chuyển hướng của Bash, thì không có sự bảo vệ nào từ việc ghi đè các tập tin, thì bạn cần thiết lập clobber tùy chọn cho trình bao của bạn.

Thêm thông tin: http://zsh.sourceforge.net/Doc/Release/Redirection.html


9
2017-12-06 20:48





NẾU bạn muốn làm từ bên trong một trình soạn thảo vim trong dòng lệnh, bạn có thể thử điều này:

vim file.txt 

nhấn Esc.

:1,$d

nhấn Đi vào.

Bạn sẽ tìm thấy tất cả các dòng bị xóa.


7
2017-09-12 18:21



Đây là điều duy nhất làm việc cho tôi maillog, cũng sudo > /var/log/maillog sẽ không xóa nó (cho phép từ chối) - bobobobo
@bobobobo Nó không hoạt động như sudo > /var/log/maillog có nghĩa là - chạy sudo, và đặt đầu ra của nó vào tập tin. Rõ ràng nó đặt đầu ra với quyền người dùng hiện tại. Điều dễ dàng hơn làm sudo su để bắt đầu vỏ gốc và sau đó làm > /var/log/maillog. - kan


$ rm file.log; touch file.log

hoặc là

$ cat > file.log

theo dõi bởi control-d.

hoặc ... hoặc ... hoặc ...

Ah. Đây là một phiên bản lệnh đơn:

$ dd if=/dev/null of=file.log

4
2018-01-01 01:59



Đề nghị của Thechickenmoo về echo "" > file.log là tốt hơn so với cat tùy chọn bạn hiển thị, trong tình huống này, tho có những người khác cat phù hợp hơn. cả hai đều sử dụng cùng một chuyển hướng shell để thực hiện việc nâng hạng nặng. - quack quixote
Bạn không cần chạy lệnh cat. Chỉ cần "> file.log" sẽ làm điều đó. - camh
Việc xóa tệp sẽ đặt lại ngày tạo. - Matteo
Việc xóa tệp sẽ khiến các chương trình xem tệp đó để mất con trỏ của chúng tới tệp đó (tức là, tệp sẽ có địa chỉ mới trong hệ thống tệp). Nói chung, vâng rm sẽ thực hiện nhiệm vụ tạo ra một tệp rỗng có cùng tên. Nhưng nó sẽ không phù hợp với mọi trường hợp sử dụng. - robert


Lệnh dưới đây cũng sẽ hoạt động:

cat /dev/null > file.log

4
2018-05-10 12:45





Nếu bạn cần sudo để đặc quyền superuser để truy cập vào tập tin thì câu trả lời được chấp nhận sẽ không hoạt động. Sử dụng tính năng này hoạt động:

truncate -s0 file

hoặc rõ ràng với sudo:

sudo truncate -s0 file

Thông tin thêm tại đây http://www.commandlinefu.com/commands/view/12/empty-a-file


1
2018-01-30 19:11





Mỗi lần một dòng?

Hãy thử vi (m), trình soạn thảo văn bản đáng yêu có thể làm bất cứ điều gì. Trong trường hợp này, điều hướng đến một dòng, nhấn d (để xóa), và d lại (cho dòng).


0
2018-01-01 03:14



Nếu bạn muốn loại bỏ toàn bộ tệp trong vim, với con trỏ ở đầu tài liệu, nhập d G (đó là d, sau đó shift-G) sẽ xóa toàn bộ tệp (d để xóa, G cho cuối của tập tin). Tôi thích phương pháp của bạn, mặc dù (nó mang lại cho tôi nhiều thời gian hơn để suy nghĩ về việc có hay không tôi thực sự muốn rác các tập tin). - Babu
@Babu gg di chuyển lên đầu để toàn bộ chuỗi có thể ggdG. - Bob