¿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 echoo 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 elsudoprefijo. Recientemente descubrí que esto también funciona connanoetc (al intentar accidentalmentenano nano auth...)!!antes, increíble. Muy a menudo hago cosas comocat /var/log/apache/error.logy 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ínea1419del 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
printfde 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 lanoclobbervariable 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,
echoagrega un carácter de nueva línea al final que se puede suprimir usando la-nbandera:Referencias
echo(1) - Linux man pagenoclobber variableI/O Redirectionfuente
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 noclobbersu,.bashrcentonces no puede sobrescribir un archivo existente sin usar la sintaxis especialecho "hello" >| <filename>Otra forma posible es:
los
-aagregará al final del archivo.Si es necesario
sudo, use:fuente
>/dev/nullal 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
teeen 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