Làm thế nào để xóa văn bản trong một tập tin?


71

Làm thế nào để xóa văn bản tồn tại trong một tệp văn bản mà không cần mở nó?

Ý tôi là ví dụ tôi có một tệp như hello.txtvới một số dữ liệu văn bản trong đó và làm cách nào tôi có thể xóa toàn bộ văn bản trong tệp đó mà không cần mở nó?

Bằng cách này, tôi có nghĩa là không sử dụng bất kỳ trình soạn thảo như nano, Gedit, v.v.


1
Bạn có ý nghĩa gì khi 'mở' một tập tin? Trong tất cả các câu trả lời cho đến nay, tập tin vẫn sẽ được mở để viết bởi shell. Cuối cùng, shell chỉ là một chương trình như bất kỳ chương trình nào khác.
Jeff

@Jeff không sử dụng bất kỳ thứ gì như nano, gedit, v.v.
rdʒɑ

Hus787 Tôi đã không gõ từ đó nếu bạn nghĩ vậy tôi hoan nghênh sự quan tâm của bạn đến câu hỏi của tôi.
rɑːdʒɑ

Tôi đồng ý với nhận xét của Jeff ... Tôi cũng có ý kiến ​​* rằng luồng tệp phải được mở để ghi vào đó, cho dù bạn sử dụng bất kỳ trình soạn thảo văn bản hay chuyển hướng nào. ( * đánh giá cao bất kỳ ai đã liên kết chặt chẽ để giúp giải quyết vấn đề này )
chính xác là

Câu trả lời:


139

Chỉ cần mở thiết bị đầu cuối của bạn với CTRL+ ALT+ Tvà nhập như

 > hello.txt

đó là nó, dữ liệu của bạn trong tập tin đó sẽ bị xóa mà không cần mở nó ra.

Thí dụ:

nhập mô tả hình ảnh ở đây


5
Về mặt kỹ thuật các tập tin sẽ được mở. Chỉ cần không phải trong một biên tập viên.
John Dibling

2
@JohnDibling thực sự đây là chuyển hướng, tôi tin rằng tập tin không được mở ở đây. Trong chuyển hướng Nội dung stdoutghi đè lên tệp hiện có nếu có. Trong trường hợp này không có gì tại stdout. Vì vậy, tập tin đang bị ghi đè bằng khoảng trống, về cơ bản là xóa sạch dữ liệu trước đó nếu có.
souravc

Có cách nào để hoàn tác lệnh này không?
Rao

@Rao, Nếu nó có dung lượng lớn như> 10GB, có thể. Nhưng bao nhiêu mức độ không chắc chắn.
rdʒɑ

28

Cách dễ nhất là cắt ngắn một tệp là chuyển hướng đầu ra của lệnh shell no-op ( :) sang tệp bạn muốn xóa.

: > hello.txt

2
Đây có lẽ không phải là dễ nhất (liên quan đến chỉ >) nhưng nhanh nhất là chắc chắn..tôi tự hỏi tại sao nó không được đề cập trong bất kỳ câu trả lời nào của câu hỏi được xem cao
này..trong đó

13

Tôi cũng sẽ sử dụng chuyển hướng như câu trả lời của rajagenupula. Nhưng có một chút linh hoạt hơn. Mở một thiết bị đầu cuối và loại,

cat > hello.txt

Và nhấn Ctrl+ C. Nó sẽ xóa sạch các tập tin trước đó. Nếu bạn muốn tối đa điều này là tốt.

Nếu bạn muốn bạn có thể làm một cái gì đó nhiều hơn sau khi xóa tập tin. Bằng cách này, bạn không chỉ có thể xóa một tập tin mà không cần mở mà còn có thể viết một vài dòng với định dạng phù hợp trong tập tin. Giả sử bạn muốn viết "Ubuntu là hệ điều hành tốt nhất" sau khi xóa tệp, chỉ cần làm

cat > hello.txt
Ubuntu is the 
best OS

Sau đó nhấn Ctrl+ C. Bây giờ các tập tin trước đó bị xóa sổ. Đồng thời các từ có hai dòng khi tôi đặt chúng.

Xem ví dụ:

nhập mô tả hình ảnh ở đây


hey cảm ơn bạn đã trả lời quá ít nhưng công việc phải hoàn thành ngay sau đó cũng & nhưng vẫn thú vị. + 1
rɑːdɑː

>là viết tắt của chuyển hướng. cat > filesẽ ghi stdoutvào tập tin, ghi đè bất kỳ tập tin hiện có.
souravc

10

Tôi phải làm điều này mọi lúc với các tệp nhật ký. Cách dễ nhất tôi đã tìm thấy là với lệnh sau:

cat /dev/null > hello.txt

Thao tác này sẽ xóa toàn bộ nội dung của tệp và để lại cho bạn một tệp trống mà không phải mở tệp trong trình chỉnh sửa, chọn văn bản, bất kỳ nội dung nào trong số đó. Cụ thể hơn những gì nó làm là thay thế nội dung của tệp bằng nội dung của "/ dev / null" hoặc không có gì. Thật sự là khá hấp dẫn.

Nhắc nhở duy nhất là người dùng mà bạn hiện đang đăng nhập phải có quyền ghi vào tập tin đã nói.


Cảm ơn bạn đã trả lời. Vui lòng thêm một ví dụ để nó có thể trông độc đáo hơn. + 1
rɑːdʒɑ

5

Nếu một tệp được tạo với tên hello.txt và được cung cấp một số văn bản thì lệnh bên dưới trong terminal ctrl+ alt+ tsẽ xóa tất cả văn bản trong tệp hello.txt ,

echo "" > hello.txt

nhập mô tả hình ảnh ở đây


Cảm ơn bạn đã trả lời, +1. mở rộng nó với một số ví dụ xin vui lòng để nó có thể trông đẹp hơn.
rɑːdʒɑ

3

Cách tiếp cận khác - cpsự /dev/nullđến tập tin

xieerqi:$ cat testFile.txt                                                                                        
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1      115247656 83100492  26269816  76% /
none                   4        0         4   0% /sys/fs/cgroup
udev             2914492        4   2914488   1% /dev
tmpfs             585216     1152    584064   1% /run
none                5120        0      5120   0% /run/lock
none             2926072    98096   2827976   4% /run/shm
none              102400       76    102324   1% /run/user

xieerqi:$ cp /dev/null testFile.txt                                                                               

xieerqi:$ cat testFile.txt

xieerqi:$ 

bạn là người đàn ông tuyệt vời
Yasser Sinjab

2

Không phải là câu trả lời ngắn nhất nhưng ...

Câu trả lời này dựa trên một câu hỏi khác từ Super User . Mặc dù không phải là lệnh bash ngắn nhất, truncatenhưng dễ đọc nhất đối với người mới trung bình:

$ echo Hello > Hello.txt
$ echo World! >> Hello.txt
$ cat Hello.txt
Hello
World!
$ truncate -s 0 Hello.txt
$ ll Hello.txt
-rw-rw-r-- 1 rick rick 0 Mar 20 17:32 Hello.txt

Các tham số được sử dụng với truncatelệnh ở đây:

  • "-s" đặt kích thước
  • Kích thước "0" sẽ bằng không

Xóa mọi thứ trừ 10.000 byte đầu tiên

Một lợi thế của truncatelà bạn có thể chỉ định số tiền cần giữ, không chỉ là 0:

$ truncate -s 10000 Hello.txt

... sẽ cắt mọi thứ sau 10.000 byte đầu tiên. Điều này có thể hữu ích nếu một chương trình phát điên và đổ nhiều Megabyte dữ liệu vào một tệp nhật ký nhỏ:

  • Chạy truncatelệnh cho kích thước bình thường lớn hơn hợp lý là 10K
  • Mở tệp bằng trình soạn thảo văn bản của bạn và nhấn End
  • Đánh dấu và PgUpxóa các byte còn lại không thuộc (thường được nhận dạng bởi các ký tự rác ASCII).

0

Vì vậy, tôi thấy rất nhiều chuyển hướng đang được sử dụng để trả lời điều này;)

Một cách tiếp cận khác với combo: rm & touch

rm hello.txt && touch hello.txt

( vâng ... còn một mánh gian lận nữa! )

Vì vậy, với lệnh này , tập tin hello.txt không được mở và cuối cùng bạn vẫn có tập tin hello.txt ở vị trí đã xóa nội dung. Đúng như bạn muốn!


4
Theo ý kiến ​​của tôi, không phải là một 'cheat' tốt, nó có thể thay đổi quyền truy cập tệp ...
Parto

2
Điều này có thể tốt hơn của xóa. Nó có thể dẫn đến các vấn đề: hoán vị có thể thay đổi. Nếu được thực hiện trên một tệp nhật ký, nó có thể dẫn đến hành vi không mong muốn từ dịch vụ dự kiến ​​nhật ký sẽ ở đó và có thể ghi được.
Rinzwind

Mặc dù câu trả lời này không phải là cách tốt nhất như một điểm đáng quan tâm: Để khắc phục các vấn đề với chủ sở hữu / quyền trước tiên, hãy kiểm tra quyền sở hữu và quyền sau đó nối thêm (điều chỉnh theo yêu cầu): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Chris

số inode sẽ bị xóa. một số inode mới sẽ được tạo ra. ý xấu.
Dipankar Nalui

0
vi filename -c ':1,$d' -c ':wq'

làm việc tốt nhất cho tôi vì sự cho phép đặc biệt của nó


Bạn có thể cải thiện câu trả lời này bằng cách giải thích vấn đề bạn gặp phải. Ngoài ra, bạn có thể giải thích chương trình vilà gì và các tham số và đối số khác nhau làm gì.
WinEunuuchs2Unix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.