Як очистити текст у файлі?


70

Як очистити текст, який існував у текстовому файлі, не відкриваючи його?

Я маю на увазі, наприклад, у мене є файл, як hello.txtі деякі текстові дані в ньому, і як я можу очистити загальний текст у цьому файлі, не відкриваючи його?

Під цим я маю на увазі не використання такого редактора, як nano, Gedit тощо.


1
Що ви маєте на увазі під відкриттям файлу? У всіх відповідях, наданих до цього часу, файл все одно буде відкритий для написання оболонкою. Зрештою, оболонка - це просто програма, як і будь-яка інша.
Джефф

@Jeff не використовує нічого такого, як nano, gedit тощо
rɑːdʒɑ

Hus787 Я не набрав можливості потрапити туди, якщо ви так думаєте, я вітаю ваш інтерес до мого питання.
rɑːdʒɑ

Я погоджуюся з коментарем Джеффа ... Я теж вважаю думку *, що файл файлу повинен бути відкритий, щоб записати на нього, будь то текстові редактори чи перенаправлення. ( * цінуй будь-кого, хто поскакував, посилання, щоб допомогти з цим питанням )
точне

Відповіді:


138

Просто відкрийте свій термінал CTRL+ ALT+ Tі введіть як

 > hello.txt

це все, ваші дані в цьому файлі будуть очищені, навіть відкривши їх.

Приклад:

введіть тут опис зображення


5
Технічно файл буде відкритий. Тільки не в редакторі.
Джон Дайблінг

2
@JohnDibling насправді це перенаправлення, я вважаю, що файл тут не відкривається. При переадресації Вміст stdoutперезаписує існуючий файл, якщо такий є. У цьому випадку нічого немає stdout. Таким чином, файл перезаписується недійсним, фактично витираючи зайві дані, якщо такі є.
souravc

Чи є спосіб скасувати цю команду?
Рао

@ Рао, якщо його великий, як> 10 Гб, може бути. Але наскільки не впевнений.
rɑːdʒɑ

28

Найпростіший спосіб - усікати файл - це перенаправити висновок команди оболонки оболонки ( :) на файл, який ви хочете стерти.

: > hello.txt

2
Це, мабуть, не найпростіший (відносно просто >), але найшвидший напевно. Цікаво, чому його не згадували ні в одній з відповідей на це дуже переглянуте питання ... ось, візьміть +1 ..
heemayl

13

Я також збираюся використовувати перенаправлення, як відповідь Раджагенупула. Але є трохи більше гнучкості. Відкрийте термінал і введіть,

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", або нічого. Насправді це дуже гладко.

Єдине застереження - це те, що користувач, на якому ви зараз увійшли в систему, повинен мати дозвіл на запис у вказаний файл.


Дякую за відповідь. Будь ласка, додайте приклад, щоб він міг виглядати
красивіше

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

ти дивовижна людина!
Ясер Сінджаб

2

Не найкоротша відповідь, але ...

Ця відповідь заснована на іншому від Super User . Хоча це не найкоротша команда 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" буде нульовим

Очистити все, крім перших 10000 байт

Перевагою truncateє те, що ви можете вказати, скільки потрібно тримати, а не лише нуль:

$ truncate -s 10000 Hello.txt

... обріже все після перших 10000 байт. Це може бути корисно, якщо програма зійшла з розуму і скинула багато мегабайт даних у невеликий файл журналу:

  • Виконайте truncateкоманду для більшого нормального розміру 10K
  • Відкрийте файл у текстовому редакторі та натисніть End
  • Виділіть і PgUpвидаліть решта байтів, які не належать (зазвичай розпізнаються символами сміття ASCII).

0

Отже, я бачу, що для відповіді на це використовується багато переспрямувань;)

Трохи інший підхід до комбо: rm & touch

rm hello.txt && touch hello.txt

( так ... ще одна накрутка! )

Отже, за допомогою цієї комбінованої команди файл hello.txt не відкрився, і врешті-решт у вас все-таки є файл hello.txt на місці з очищеним вмістом. Як ви хотіли!


3
На мій погляд, це не дуже хороший "обман", він може змінити дозволи файлів ...
Parto

1
Це може бути краще видалено. Це може призвести до проблем: дозвіл може змінюватися. Якщо це зроблено у файлі журналу, це може призвести до несподіваної поведінки служби, яка очікує, що цей журнал буде там і його можна буде записати.
Rinzwind

Хоча ця відповідь не є найкращим способом, який цікавить: Щоб виправити проблеми з власником / дозволом, спочатку перевірте право власності та дозволи, а потім додайте це (коригуйте за потребою): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Кріс

номер inode буде видалений. буде створено нове число inode. погана ідея.
Діпанкар Налуї

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

працював найкраще для мене через особливий дозвіл, який він мав


Ви можете вдосконалити цю відповідь, розробивши проблему, яку ви мали. Також ви могли б пояснити, що таке програма viі що різні параметри та аргументи.
WinEunuuchs2Unix
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.