¿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.
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 elsudo
prefijo. Recientemente descubrí que esto también funciona connano
etc (al intentar accidentalmentenano nano auth
...)!!
antes, increíble. Muy a menudo hago cosas comocat /var/log/apache/error.log
y me niegan el permiso. Esto también se puede hacer con una identificación del historialsudo !1419
, por ejemplo , esto ejecutará el comando en la línea1419
del historial como sudo.Qué tal si:
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: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 lanoclobber
variable en su.bashrc
:Ahora, cuando intentes hacerlo
echo "hello" > file.txt
, recibirás una advertenciacannot overwrite existing file
.Para forzar la escritura en el archivo, ahora debe usar la sintaxis especial:
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:Referencias
echo(1) - Linux man page
noclobber variable
I/O Redirection
fuente
cat
, pero es mejor que tenga cuidado de asegurarse de usar en>>
lugar de>
!sudo rm -r /
=)sudo rm -r /
quesudo 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:
los
-a
agregará al final del archivo.Si es necesario
sudo
, use:fuente
>/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:
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:
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:fuente
cat << 'EOF' >
durante años y no sabía cómocat << 'EOF' >>
agregar! Gracias