¿Cómo borrar texto en un archivo?

71

¿Cómo borrar el texto que existía en un archivo de texto sin abrirlo?

Quiero decir, por ejemplo, tengo un archivo hello.txtcon algunos datos de texto, y ¿cómo puedo borrar el texto total en ese archivo sin abrirlo?

Con esto, me refiero a no usar ningún editor como nano, Gedit, etc.

rɑːdʒɑ
fuente
1
¿Qué quieres decir con 'abrir' un archivo? En todas las respuestas dadas hasta ahora, el archivo aún se abrirá para que el shell lo escriba. Al final, el shell es solo un programa como cualquier otro.
Jeff
@Jeff no usa nada como nano, gedit, etc.
rɑːdʒɑ
Hus787 No he escrito desde llegar allí si crees que sí, agradezco tu interés en mi pregunta.
rɑːdʒɑ
Estoy de acuerdo con el comentario de Jeff ... También tengo la opinión * de que la secuencia de archivos debe abrirse para escribir en ella, ya sea que use editores de texto o redirección. ( * agradezco a cualquiera que sugiera enlaces para ayudar con el asunto )
precisa

Respuestas:

139

Simplemente abra su terminal con CTRL+ ALT+ Ty escriba como

 > hello.txt

eso es todo, sus datos en ese archivo se borrarán incluso sin abrirlo.

Ejemplo:

ingrese la descripción de la imagen aquí

rɑːdʒɑ
fuente
55
Técnicamente se abrirá el archivo. Simplemente no en un editor.
John Dibling
2
@JohnDibling en realidad esto es redirección, creo que el archivo no se está abriendo aquí. En redirección El contenido de stdoutsobrescribe el archivo existente, si lo hay. En este caso no hay nada en stdout. Por lo tanto, el archivo se sobrescribe con vacío, esencialmente borrando datos preventivos, si los hay.
souravc
¿Hay alguna manera de deshacer este comando?
Rao
@Rao, si es grande como> 10GB, puede ser. Pero en qué medida no estoy seguro.
rɑːdʒɑ
28

La forma más fácil es truncar un archivo es redirigir la salida del comando shell no-op ( :) al archivo que desea borrar.

: > hello.txt
eradman
fuente
2
Probablemente no sea la más fácil (en relación con solo >), pero la más rápida con seguridad ... Me pregunto por qué no se ha mencionado en ninguna de las respuestas de esta pregunta tan vista ... aquí, tome +1 ...
heemayl
13

También voy a usar la redirección como la respuesta de rajagenupula. Pero hay un poco más de flexibilidad. Abra una terminal y escriba,

cat > hello.txt

Y presiona Ctrl+ C. Eliminará el archivo anterior. Si quieres tanto, está bien.

Si lo desea, puede hacer algo más después de borrar el archivo. De esta manera, no solo puede borrar un archivo sin abrirlo, sino que también puede escribir algunas líneas con el formato adecuado en el archivo. Digamos que desea escribir "Ubuntu es el mejor sistema operativo" después de borrar el archivo, solo haga

cat > hello.txt
Ubuntu is the 
best OS

Luego presione Ctrl+ C. Ahora el archivo anterior está borrado. Al mismo tiempo, las palabras están en dos líneas como las puse.

Mira el ejemplo:

ingrese la descripción de la imagen aquí

souravc
fuente
hey gracias por responder muy poco, pero también hay trabajo por hacer justo después de eso, pero sigue siendo interesante. + 1
rɑːdʒɑ
>significa redirección. cat > fileescribirá stdouten el archivo, sobrescribiendo cualquier archivo existente.
souravc
10

Tengo que hacer esto todo el tiempo con archivos de registro. La forma más fácil que he encontrado es con el siguiente comando:

cat /dev/null > hello.txt

Esto elimina todo el contenido del archivo y te deja con un archivo vacío sin tener que abrirlo en un editor, seleccionar texto, ni nada de eso. Más específicamente, lo que hace es reemplazar el contenido del archivo con el contenido de "/ dev / null", o nada. Es bastante hábil, en realidad.

La única advertencia es que el usuario con el que está conectado actualmente debe tener permiso de escritura en dicho archivo.

Don Briggs
fuente
Gracias por la respuesta. Agregue un ejemplo para que se vea mejor. + 1
rɑːdʒɑ
5

Si se creó un archivo con el nombre hello.txt y se le proporcionaron algunos textos, el siguiente comando en terminal ctrl+ alt+ teliminará todo el texto en el archivo hello.txt ,

echo "" > hello.txt

ingrese la descripción de la imagen aquí

Avinash Raj
fuente
Gracias por responder, +1. expandirlo con algún ejemplo por favor para que se vea más agradable.
rɑːdʒɑ
3

Otro enfoque: cpel /dev/nulldel archivo

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:$ 
Sergiy Kolodyazhnyy
fuente
eres un hombre asombroso!
Yasser Sinjab
2

No es la respuesta más corta pero ...

Esta respuesta se basa en otra de Super User . Aunque no es el comando bash más corto, truncatees el más legible para los novatos promedio:

$ 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

Parámetros utilizados con el truncatecomando aquí:

  • "-s" establece el tamaño
  • El tamaño "0" será cero

Borrar todo excepto los primeros 10,000 bytes

Una ventaja de truncatees que puede especificar cuánto guardar, no solo cero:

$ truncate -s 10000 Hello.txt

... truncará todo después de los primeros 10,000 bytes. Esto podría ser útil si un programa se volviera loco y volcara muchos Megabytes de datos en un pequeño archivo de registro:

  • Ejecute el truncatecomando para un tamaño normal razonablemente mayor de 10K
  • Abra el archivo con su editor de texto y presione End
  • Resalte y PgUpelimine los bytes restantes que no pertenecen (generalmente reconocibles por caracteres basura ASCII).
WinEunuuchs2Unix
fuente
0

Entonces, veo muchas redirecciones que se utilizan para responder esto;)

Un enfoque un poco diferente con el combo: rm & touch

rm hello.txt && touch hello.txt

( sí ... ¡otro truco! )

Entonces, con este combo de comando, el archivo hello.txt no se abrió y al final todavía tiene el archivo hello.txt en su lugar con el contenido borrado. Justo como querías!

preciso
fuente
44
No es un buen "truco" en mi opinión, puede cambiar los permisos de los archivos ...
Parto
2
Esto podría ser mejor de eliminado. Puede provocar problemas: los permisos pueden cambiar. Si se realiza en un archivo de registro, puede provocar un comportamiento inesperado del servicio que espera que el registro esté allí y se pueda escribir.
Rinzwind
Si bien esta respuesta no es la mejor manera como punto de interés: para corregir los problemas con el propietario / permiso, primero verifique la propiedad y los permisos, luego agregue esto (ajuste según sea necesario): && sudo chown user: group hello.txt && sudo chmod 644 hello.txt
Chris
El número de inodo será eliminado. Se creará un nuevo número de inodo. mala idea.
Dipankar Nalui
0
vi filename -c ':1,$d' -c ':wq'

funcionó mejor para mí debido al permiso particular que tenía

Daniel
fuente
Puede mejorar esta respuesta elaborando el problema que tuvo. También podría explicar qué es el programa viy qué hacen los diversos parámetros y argumentos.
WinEunuuchs2Unix