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

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

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

68
задан 27.04.2020, 23:37

10 ответов

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

 > hello.txt

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

Пример:

enter image description here

135
ответ дан 27.04.2020, 23:40
  • 1
    Существует ли способ отменить эту команду? – SergeyA 27.04.2020, 23:40
  • 2
    Технически файл будет открыт. Просто не в редакторе. – Gaju Kollur 27.04.2020, 23:40
  • 3
    @Rao, Если это - большое как > 10 ГБ, может быть. Но сколько степени, не уверенной. – gnasher729 27.04.2020, 23:41
  • 4
    @JohnDibling на самом деле, это - перенаправление, я полагаю, что файл не открывается здесь. В перенаправлении содержание stdout перезаписи существующий файл если таковые имеются. В этом случае нет ничего в stdout. Таким образом, файл перезаписывается с пустым, по существу вытирающими предыдущими данными если таковые имеются. – Chris Schiffhauer 27.04.2020, 23:41
vi filename -c ':1,$d' -c ':wq'

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

0
ответ дан 27.04.2020, 23:38
  • 1
    Можно улучшить этот ответ путем разработки проблему, которую Вы имели. Также Вы могли объяснить, что программа vi и что делают различные параметры и аргументы. – vedran 27.04.2020, 23:38

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

echo "" > hello.txt

enter image description here

5
ответ дан 27.04.2020, 23:38
  • 1
    Спасибо за ответ, +1. разверните его с некоторым примером, таким образом, это может быть более хороший взгляд. – Craig Estey 27.04.2020, 23:38

Другой подход - 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:$ 
3
ответ дан 27.04.2020, 23:39

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

Несколько иной подход с комбо: rm & amp; коснитесь

rm hello.txt && touch hello.txt

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

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

0
ответ дан 27.04.2020, 23:40
  • 1
    число inode будет удалено. будет создано новое inode число. плохая идея. – vedran 27.04.2020, 23:40
  • 2
    Не хороший ' cheat' по-моему, это может изменить полномочия файла... – curiousguy 27.04.2020, 23:41
  • 3
    Это могло бы быть лучше из удаленных. Это может привести к проблемам: полномочия могут измениться. Если сделано на файле журнала это может привести к неожиданному поведению из службы, которая ожидает, что журнал будет там и будет перезаписываем. – Tung Tran 27.04.2020, 23:41
  • 4
    В то время как этот ответ не является лучшим способом как интересным местом: Для исправления проблем с владельцем/разрешением сначала проверяют владение, и полномочия тогда добавляют это (корректируйтесь как требуется): & & sudo, показанный user:group hello.txt & & sudo chmod 644 hello.txt – Muhammad Farhan Aqeel 27.04.2020, 23:42

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

cat > hello.txt

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

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

cat > hello.txt
Ubuntu is the 
best OS

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

См. Пример:

enter image description here

13
ответ дан 27.04.2020, 23:41
  • 1
    эй спасибо за ответ. так мало, но работа, которая будет сделана правильно после этого также & но все еще интересный. +1 – Dragon Energy 27.04.2020, 23:41
  • 2
    > обозначает перенаправление. cat > file запишет stdout для регистрации, перезаписывая любой существующий файл. – Dragon Energy 27.04.2020, 23:42

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

cat > hello.txt

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

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

cat > hello.txt
Ubuntu is the 
best OS

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

См. Пример:

enter image description here

13
ответ дан 27.04.2020, 23:41

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

cat /dev/null > hello.txt

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

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

10
ответ дан 27.04.2020, 23:42
  • 1
    Спасибо за ответ. Добавьте пример так, чтобы это могло посмотреть более приятно. + 1 – Craig Estey 27.04.2020, 23:42

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

: > hello.txt
28
ответ дан 27.04.2020, 23:42
  • 1
    Вероятно, не самое легкое (относительно всего >), но самое быстрое наверняка.. я задаюсь вопросом, почему это не было упомянуто ни в одном из ответов этого высоко просматриваемого вопроса.. здесь, возьмите +1.. – SergeyA 27.04.2020, 23:42

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

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

Очистить все, кроме первых 10000 байт

Преимущество truncate заключается в том, что вы можете указать, сколько сохранить , а не только ноль:

$ truncate -s 10000 Hello.txt

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

  • Запустите команду truncate для приемлемого большего нормального размера - 10 КБ
  • Откройте файл в текстовом редакторе и нажмите End
  • Выделите и PgUp , чтобы удалить оставшиеся байты, которые не принадлежат (обычно распознаваемые символами мусора ASCII ).
2
ответ дан 27.04.2020, 23:43

Теги

Похожие вопросы