จะลบข้อความในไฟล์ได้อย่างไร?


70

วิธีการล้างข้อความที่มีอยู่ในไฟล์ข้อความโดยไม่เปิดขึ้นมา?

ฉันหมายถึงตัวอย่างเช่นฉันมีไฟล์เช่นเดียวhello.txtกับข้อมูลข้อความในนั้นและฉันจะล้างข้อความทั้งหมดในไฟล์นั้นโดยไม่ต้องเปิดได้อย่างไร

โดยสิ่งนี้ฉันหมายถึงไม่ได้ใช้โปรแกรมแก้ไขใด ๆ เช่น nano, Gedit เป็นต้น


1
คุณหมายถึงอะไรด้วยการ 'เปิด' ไฟล์ ในคำตอบทั้งหมดที่ให้ไว้จนถึงตอนนี้ไฟล์จะยังคงเปิดอยู่สำหรับการเขียนโดยเชลล์ ในตอนท้ายเชลล์เป็นเพียงโปรแกรมที่เหมือนกัน
Jeff

@ เจฟไม่ได้ใช้สิ่งใด ๆ เช่นนาโน gedit ฯลฯ
rɑːdʒɑ

Hus787 ฉันไม่ได้พิมพ์จากที่นั่นถ้าคุณคิดอย่างนั้นฉันยินดีต้อนรับความสนใจในคำถามของฉัน
rɑːdʒɑ

ฉันเห็นด้วยกับความคิดเห็นของเจฟฟ์ ... ฉันก็มีความเห็นเช่นกันว่าต้องเปิดไฟล์สตรีมเพื่อเขียนไม่ว่าคุณจะใช้โปรแกรมแก้ไขข้อความหรือเปลี่ยนเส้นทาง ( * ขอขอบคุณทุกคนที่แนะนำลิงก์เพื่อช่วยในเรื่องนี้ )
แม่นยำ

คำตอบ:


138

เพียงเปิดเทอร์มินัลด้วยCTRL+ ALT+ Tแล้วพิมพ์เป็น

 > hello.txt

นั่นคือข้อมูลของคุณในไฟล์นั้นจะถูกล้างออกโดยไม่เปิดแม้แต่

ตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่


5
ในทางเทคนิคไฟล์จะถูกเปิด ไม่ใช่แค่ในเครื่องมือแก้ไข
John Dibling

2
@JohnDibling จริง ๆ แล้วนี่คือการเปลี่ยนเส้นทางฉันเชื่อว่าไฟล์ไม่ได้ถูกเปิดที่นี่ ในการเปลี่ยนเส้นทางเนื้อหาของการstdoutเขียนทับไฟล์ที่มีอยู่ถ้ามี stdoutในกรณีนี้มีอะไรที่ ดังนั้นไฟล์จะถูกเขียนทับด้วยโมฆะโดยจะทำการลบข้อมูลที่เป็นประโยชน์หากมี
souravc

มีวิธียกเลิกคำสั่งนี้หรือไม่
ราว

@ ราวถ้ามันมีขนาดใหญ่เช่น> 10GB อาจจะเป็น แต่เท่าไหร่ไม่แน่ใจ
rɑːdʒɑ

28

วิธีที่ง่ายที่สุดคือตัดทอนไฟล์เพื่อเปลี่ยนทิศทางเอาต์พุตของคำสั่ง shell no-op ( :) ไปยังไฟล์ที่คุณต้องการลบ

: > hello.txt

2
มันอาจจะไม่ได้ง่ายที่สุด (เทียบกับเพียง>) แต่น่าแปลกใจที่เร็วที่สุดสำหรับ sure..i ทำไมมันยังไม่ได้รับการกล่าวถึงอยู่ในคำตอบนี้ question..here ดูสูงที่ใช้เวลา 1 ..
heemayl

13

ฉันจะใช้การเปลี่ยนเส้นทางเหมือนคำตอบของ rajagenupula แต่มีความยืดหยุ่นมากกว่าเล็กน้อย เปิดเทอร์มินัลแล้วพิมพ์

cat > hello.txt

และกด+Ctrl Cมันจะล้างไฟล์ก่อนหน้า ถ้าคุณต้องการมากเกินขนาดนี้มันก็ใช้ได้

หากคุณต้องการคุณสามารถทำอะไรได้มากกว่านี้หลังจากเช็ดไฟล์ ด้วยวิธีนี้ไม่เพียง แต่คุณสามารถล้างไฟล์โดยไม่เปิด แต่ยังสามารถเขียนสองสามบรรทัดด้วยการจัดรูปแบบที่เหมาะสมในไฟล์ สมมติว่าคุณต้องการเขียน "Ubuntu เป็นระบบปฏิบัติการที่ดีที่สุด" หลังจากเช็ดไฟล์เพียงทำ

cat > hello.txt
Ubuntu is the 
best OS

จากนั้นกด+Ctrl Cตอนนี้ไฟล์ก่อนหน้าจะถูกลบออก ในขณะเดียวกันคำพูดก็มีอยู่สองบรรทัดตามที่ฉันใส่ไว้

ดูตัวอย่าง:

ป้อนคำอธิบายรูปภาพที่นี่


เฮ้ขอบคุณสำหรับการตอบ น้อยมาก แต่จะต้องทำหลังจากนั้น & ยังน่าสนใจ + 1
rɑːdʒɑ

>หมายถึงการเปลี่ยนเส้นทาง cat > fileจะเขียนstdoutลงไฟล์เขียนทับไฟล์ที่มีอยู่
souravc

10

ฉันต้องทำสิ่งนี้ตลอดเวลาด้วยไฟล์บันทึก วิธีที่ง่ายที่สุดที่ฉันพบคือใช้คำสั่งต่อไปนี้:

cat /dev/null > hello.txt

การทำเช่นนี้จะลบเนื้อหาทั้งหมดของไฟล์และทำให้คุณมีไฟล์ว่างเปล่าโดยไม่ต้องเปิดในโปรแกรมแก้ไขเลือกข้อความหรืออะไรก็ได้ โดยเฉพาะอย่างยิ่งสิ่งที่มันทำคือการแทนที่เนื้อหาของไฟล์ด้วยเนื้อหาของ "/ dev / null" หรืออะไร มันลื่นจริง ๆ

ข้อแม้เดียวคือผู้ใช้ที่คุณกำลังเข้าสู่ระบบในขณะที่ต้องมีสิทธิ์ในการเขียนไฟล์ดังกล่าว


ขอบคุณสำหรับคำตอบ โปรดเพิ่มตัวอย่างเพื่อให้สามารถดูได้อย่างสวยงามมากขึ้น + 1
rɑːdʒɑ

5

หากไฟล์ถูกสร้างขึ้นด้วยชื่อhello.txtและได้รับมาพร้อมกับข้อความบางส่วนคำสั่งด้านล่างในเทอร์มินัลctrl+ alt+ tจะลบข้อความทั้งหมดในไฟล์hello.txt

echo "" > hello.txt

ป้อนคำอธิบายรูปภาพที่นี่


ขอบคุณสำหรับการตอบรับ +1 โปรดขยายด้วยตัวอย่างเพื่อให้ดูดีขึ้น
rɑːdʒɑ

3

อีกวิธีหนึ่ง - ไปยังแฟ้มcp/dev/null

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:$ 

คุณเป็นคนที่ยอดเยี่ยม!
Yasser Sinjab

2

ไม่ใช่คำตอบที่สั้นที่สุด แต่ ...

คำตอบนี้ขึ้นอยู่กับคำตอบอื่นจากผู้ใช้ขั้นสูง แม้ว่าจะไม่ใช่คำสั่ง bash ที่สั้นที่สุด แต่truncateสามารถอ่านได้มากที่สุดสำหรับมือใหม่โดยเฉลี่ย:

$ 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

พารามิเตอร์ที่ใช้กับtruncateคำสั่งที่นี่:

  • "-s" กำหนดขนาด
  • ขนาด "0" จะเป็นศูนย์

ล้างทุกอย่างยกเว้น 10,000 ไบต์แรก

ข้อดีtruncateคือคุณสามารถระบุจำนวนเงินที่จะเก็บไว้ไม่ใช่แค่ศูนย์:

$ truncate -s 10000 Hello.txt

... จะตัดทุกอย่างหลังจาก 10,000 ไบต์แรก สิ่งนี้อาจมีประโยชน์หากโปรแกรมทำงานผิดปกติและทิ้งข้อมูลจำนวนมากลงในไฟล์บันทึกขนาดเล็ก:

  • รันtruncateคำสั่งเพื่อให้มีขนาดปกติที่ใหญ่กว่าที่สมเหตุสมผลเป็น 10K
  • เปิดไฟล์ด้วยโปรแกรมแก้ไขข้อความและกด End
  • ไฮไลต์และPgUpเพื่อลบไบต์ที่เหลือซึ่งไม่ได้อยู่ (มักจะรู้จักโดยตัวอักษรขยะ ASCII)

0

ดังนั้นฉันเห็นการเปลี่ยนเส้นทางจำนวนมากถูกใช้เพื่อตอบคำถามนี้)

แนวทางที่แตกต่างเล็กน้อยกับคอมโบ: rm & touch

rm hello.txt && touch hello.txt

( ใช่ ... ยังมีอีกคนโกง! )

ดังนั้นด้วยคำสั่งนี้คอมโบไฟล์ hello.txt จึงไม่เปิดขึ้นและในที่สุดคุณก็ยังมีไฟล์ hello.txt อยู่ในตำแหน่งพร้อมกับเนื้อหาที่ถูกเคลียร์ เหมือนที่คุณต้องการ!


3
ไม่ดี 'โกง' ในความคิดของฉันก็สามารถเปลี่ยนสิทธิ์แฟ้ม ...
Parto

1
อาจเป็นการลบที่ดีกว่า มันอาจนำไปสู่ปัญหา: การอนุญาตสามารถเปลี่ยนแปลงได้ หากทำในไฟล์บันทึกมันจะนำไปสู่พฤติกรรมที่ไม่คาดคิดจากบริการที่คาดว่าบันทึกจะอยู่ที่นั่นและเขียนทับได้
Rinzwind

ในขณะที่คำตอบนี้ไม่ใช่วิธีที่ดีที่สุดในฐานะที่เป็นจุดสนใจ: หากต้องการแก้ไขปัญหาเกี่ยวกับเจ้าของ / การอนุญาตก่อนอื่นให้ตรวจสอบความเป็นเจ้าของและการอนุญาตจากนั้นผนวก (แก้ไขตามต้องการ): && sudo ผู้ใช้ chown: กลุ่ม hello.txt && sudo chmod 644 hello.txt
Chris

หมายเลข inode จะถูกลบ หมายเลขไอโหนดใหม่จะถูกสร้างขึ้น ความคิดที่ไม่ดี
Dipankar Nalui

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

ทำงานได้ดีที่สุดสำหรับฉันเนื่องจากได้รับอนุญาตเฉพาะ


คุณสามารถปรับปรุงคำตอบนี้โดยอธิบายรายละเอียดเกี่ยวกับปัญหาที่เกิดขึ้น นอกจากนี้คุณสามารถอธิบายได้ว่าโปรแกรมviคืออะไรและสิ่งที่พารามิเตอร์และข้อโต้แย้งต่างๆทำ
WinEunuuchs2Unix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.