¿Cuál es la forma más sencilla de agregar texto a un archivo en Linux?
Eché un vistazo a esta pregunta , pero la respuesta aceptada usa un programa adicional ( sed
) Estoy seguro de que debería haber una forma más fácil con echo
o similar.
¿Cuál es la forma más sencilla de agregar texto a un archivo en Linux?
Eché un vistazo a esta pregunta , pero la respuesta aceptada usa un programa adicional ( sed
) Estoy seguro de que debería haber una forma más fácil con echo
o similar.
Respuestas:
cat >> filename
This is text, perhaps pasted in from some other source.
Or else entered at the keyboard, doesn't matter.
^D
Básicamente, puede volcar cualquier texto que desee en el archivo. CTRL-D envía una señal de fin de archivo, que termina la entrada y lo regresa al shell.
sudo !!
, que ejecuta el último comando con el sudo
prefijo. Recientemente descubrí que esto también funciona con nano
etc (al intentar accidentalmente nano nano auth
...)
!!
antes, increíble. Muy a menudo hago cosas como cat /var/log/apache/error.log
y me niegan el permiso. Esto también se puede hacer con una identificación del historial sudo !1419
, por ejemplo , esto ejecutará el comando en la línea 1419
del historial como sudo.
Qué tal si:
echo "hello" >> <filename>
El uso del >>
operador agregará datos al final del archivo, mientras que el uso de >
sobrescribirá el contenido del archivo si ya existe.
También puedes usar printf
de la misma manera:
printf "hello" >> <filename>
Tenga en cuenta que puede ser peligroso utilizar lo anterior. Por ejemplo, si ya tiene un archivo y necesita agregar datos al final del archivo y se olvida de agregar el último, >
todos los datos del archivo serán destruidos. Puede cambiar este comportamiento configurando la noclobber
variable en su .bashrc
:
set -o noclobber
Ahora, cuando intentes hacerlo echo "hello" > file.txt
, recibirás una advertencia cannot overwrite existing file
.
Para forzar la escritura en el archivo, ahora debe usar la sintaxis especial:
echo "hello" >| <filename>
También debe saber que, de forma predeterminada, echo
agrega un carácter de nueva línea al final que se puede suprimir usando la -n
bandera:
echo -n "hello" >> <filename>
Referencias
cat
, pero es mejor que tenga cuidado de asegurarse de usar en >>
lugar de >
!
sudo rm -r /
=)
sudo rm -r /
que sudo rm -rf /
! ^ _ ^ ¿Existe una bandera que solicite confirmación antes de sobrescribir el contenido de un archivo existente con >
? Parece que sería una buena idea utilizar un alias para usar siempre dicha bandera.
set -o noclobber
su, .bashrc
entonces no puede sobrescribir un archivo existente sin usar la sintaxis especialecho "hello" >| <filename>
Otra forma posible es:
echo "text" | tee -a filename >/dev/null
los -a
agregará al final del archivo.
Si es necesario sudo
, use:
echo "text" | sudo tee -a filename >/dev/null
>/dev/null
al final evita que se muestre "texto" en su consola.
Seguimiento de la respuesta aceptada.
Necesita algo diferente a CTRL-D para designar el final si lo usa en un script . Prueba esto en su lugar:
cat << EOF >> filename
This is text entered via the keyboard or via a script.
EOF
Esto agregará texto al archivo indicado (sin incluir "EOF").
Utiliza un documento here (o heredoc) .
Sin embargo, si necesita que sudo se agregue al archivo indicado, tendrá problemas para utilizar un heredoc debido a la redirección de E / S si está escribiendo directamente en la línea de comando.
Esta variación funcionará cuando escriba directamente en la línea de comando:
sudo sh -c 'cat << EOF >> filename
This is text entered via the keyboard.
EOF'
O puede usar tee
en su lugar para evitar el problema de sudo de línea de comando que se ve al usar heredoc con cat:
tee -a filename << EOF
This is text entered via the keyboard or via a script.
EOF
cat << 'EOF' >
durante años y no sabía cómo cat << 'EOF' >>
agregar! Gracias