Как очистить текст в файле?

71

Как очистить текст, который существовал в текстовом файле, не открывая его?

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

Под этим я подразумеваю не использовать какой-либо редактор, такой как nano, Gedit и т. Д.

rɑːdʒɑ
источник
1
Что вы подразумеваете под «открытием» файла? Во всех приведенных ответах файл все равно будет открыт для записи оболочкой. В конце концов, оболочка - это просто программа, как и любая другая.
Джефф
@Джефф не использует ничего, таких как нано, гедит и т. Д.
rɑːdʒɑ
Hus787 Я не печатал, чтобы попасть туда, если вы так думаете, иначе я приветствую ваш интерес к моему вопросу.
2013 года
Я согласен с комментарием Джеффа ... У меня тоже есть мнение *, что поток файлов должен быть открыт для записи в него, используете ли вы какие-либо текстовые редакторы или перенаправление. ( * спасибо, что кто-нибудь вставил ссылки, чтобы помочь с этим вопросом )
точно

Ответы:

139

Просто откройте ваш терминал с CTRL+ ALT+ Tи типа,

 > hello.txt

вот и все, ваши данные в этом файле будут очищены, даже не открывая его.

Пример:

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

rɑːdʒɑ
источник
5
Технически файл будет открыт. Просто не в редакторе.
Джон Диблинг
2
@JohnDibling на самом деле это перенаправление, я думаю, что файл не открывается здесь. В перенаправлении Содержимое stdoutперезаписывает существующий файл, если таковой имеется. В этом случае ничего нет stdout. Таким образом, файл перезаписывается с помощью void, по существу стирая предыдущие данные, если таковые имеются.
souravc
Есть ли способ отменить эту команду?
Рао
@Rao, если это большое, как> 10GB, может быть. Но в какой степени не уверен.
rɑːdʒɑ
28

Самый простой способ - обрезать файл - перенаправить вывод команды shell no-op ( :) в файл, который вы хотите стереть.

: > hello.txt
eradman
источник
2
Его , вероятно , не самый простой (относительно просто >) , но самый быстрый для sure..i удивления , почему она не упоминается ни в одном из ответов этого высоко смотрели question..here, взять +1 ..
heemayl
13

Я также собираюсь использовать перенаправление как ответ раджагенупулы. Но есть немного больше гибкости. Откройте терминал и введите

cat > hello.txt

И нажмите Ctrl+ C. Это сотрет предыдущий файл. Если вы хотите до этого много, это хорошо.

Если вы хотите, вы можете сделать что-то еще после стирания файла. Таким образом, вы можете не только стереть файл без открытия, но также вы можете написать несколько строк с правильным форматированием в файле. Скажем, вы хотите написать «Ubuntu - лучшая ОС» после очистки файла, просто сделайте

cat > hello.txt
Ubuntu is the 
best OS

Затем нажмите Ctrl+ C. Теперь предыдущий файл уничтожен. В то же время слова заключены в две строки.

Смотрите пример:

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

souravc
источник
эй, спасибо за ответ. так мало, но работа должна быть сделана сразу после этого также и но все еще интересно. + 1
rɑːdʒɑ
>обозначает перенаправление. cat > fileзапишет stdoutв файл, переписав любой существующий файл.
souravc
10

Я должен делать это все время с файлами журналов. Самый простой способ, который я нашел, это с помощью следующей команды:

cat /dev/null > hello.txt

Это удаляет все содержимое файла, и оставляет вас с пустым файлом без необходимости открывать его в редакторе, выбирать текст, любой из этого материала. Точнее, он заменяет содержимое файла содержимым «/ dev / null» или ничего. Это довольно гладко, на самом деле.

Единственное предостережение заключается в том, что пользователь, к которому вы сейчас подключены, должен иметь разрешение на запись в указанный файл.

Дон бриггс
источник
Спасибо за ответ. Пожалуйста, добавьте пример, чтобы он выглядел более красиво. + 1
rʒɑdʒɑ 13.12.13
5

Если файл был создан с именем hello.txt и был снабжен некоторыми текстами, то приведенная ниже команда в терминале ctrl+ alt+ tудалит весь текст в файле hello.txt ,

echo "" > hello.txt

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

Авинаш Радж
источник
Спасибо за ответ, +1. Расширьте это на некотором примере, пожалуйста, чтобы он выглядел более красиво.
2013 года
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

Не самый короткий ответ, но ...

Этот ответ основан на другом от Супер пользователя . Хотя это и не самая короткая команда 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

... обрежет все после первых 10 000 байтов. Это может быть полезно, если программа сошла с ума и сбросила много мегабайт данных в небольшой файл журнала:

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

Итак, я вижу много перенаправлений, используемых для ответа на это;)

Немного другой подход с комбо: rm & touch

rm hello.txt && touch hello.txt

( да ... еще один чит! )

Таким образом, с помощью этой комбо- команды файл hello.txt не был открыт, и в конце концов у вас все еще есть файл hello.txt на его месте с очищенным содержимым. Так же, как вы хотели!

точный
источник
4
На мой взгляд, это не очень хороший читер, он может изменять права доступа к файлам ...
Parto
2
Это может быть лучше удалено. Это может привести к проблемам: разрешения могут измениться. Если это сделано для файла журнала, это может привести к неожиданному поведению службы, которая ожидает, что журнал будет там и будет доступен для записи.
Rinzwind
Хотя этот ответ не является наилучшим способом рассмотрения вопроса: чтобы исправить проблемы с владельцем / разрешением, сначала проверьте владельца и разрешения, а затем добавьте это (при необходимости измените): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Крис
номер индекса будет удален. будет создан новый номер инода. плохая идея.
Дипанкар Налуй
0
vi filename -c ':1,$d' -c ':wq'

работал лучше всего для меня из-за особого разрешения у него было

Даниил
источник
Вы можете улучшить этот ответ, подробно остановившись на проблеме. Также вы можете объяснить, что это за программа viи что делают различные параметры и аргументы.
WinEunuuchs2Unix