Estoy escribiendo un script bash para buscar un archivo si no existe, entonces créelo y añádelo:
Host localhost
ForwardAgent yes
Entonces "line then new line 'tab' then text"creo que es un formato sensible. Sé que puedes hacerlo:
cat temp.txt >> data.txt
Pero parece extraño ya que son dos líneas. ¿Hay alguna manera de agregar eso en este formato?
echo "hello" >> greetings.txt
shell
text-processing
io-redirection
La leyenda
fuente
fuente

( echo "line 1" ; echo "line 2" ) >>greetings.txt.{ echo "line 1" ; echo "line 2"; } >>greetings.txtcat <<EOTlaEOTes sólo una cadena aleatoria.cat <<FOOTambién podría serlo .O, si lo que desea es una pestaña literal (en lugar de los cuatro espacios en su pregunta):
Puede lograr el mismo efecto con
echo, pero exactamente cómo varía de implementación en implementación, mientras queprintfes constante.fuente
fuente
Otro enfoque es usar
teeAlgunas líneas de elección de
teela página man de:fuente
SED puede agregar una línea al final de un archivo de la siguiente manera:
sed -i '$ a text to be inserted' fileName.file$selecciona el final del archivo,ale dice que agregue, y después de esto viene el texto que se va a insertar. Luego, por supuesto, el nombre del archivo.Fuente: http://www.yourownlinux.com/2015/04/sed-command-in-linux-append-and-insert-lines-to-file.html
========== EDIT == ==========
¿Este enfoque tiene algún beneficio adicional que otras soluciones?
Sí, este enfoque tiene el beneficio adicional de agregar a cualquier archivo devuelto en una búsqueda, como este:
find . -name "*.html" -exec sed -i '$ a </html>' {} \;Utilicé el ejemplo anterior para insertar la etiqueta html final que faltaba en cada página html dentro de varios directorios.
===================================
fuente
sed. BSDsedrescata con el error:command a expects \ followed by text. Así que no use esto para una solución con script; Es probable que se rompa. (O hágalo correctamente ya que la sintaxis requerida de BSD es compatible con POSIX y funcionará también en GNUsed.findlos siguientes:find . -name "*.txt" -exec sh -c 'printf "%s\n\t%s\n" "Host localhost" "ForwardAgent yes" >> "$1"' sh {} ";".>,>>) y, por lo tanto, no sufre sus problemas, como la ejecuciónsudo echo 'something' > /file. Para mí es perfectamente permite añadir una línea a un archivo en un recipiente LXD así:lxc exec c sed -- '$ a newline' /myfile.echo "a new line" >> foo.fileno va a crear una nueva línea cuando el archivo no es el fin de la nueva línea, perosed -i '$ a a new line' foo.filelo hará, por lo quesedes mejor, especialmente uno siempre quiere añadir una nueva línea en el fichero.Solía sed porque se puede usar con sudo. Por ejemplo:
la alternativa es muy fea como:
e incluso más feo cuando se hace con ssh.
fuente
sed -iNo tomas una extensión como argumento? Su ejemplo puede tener parámetros incorrectos.Otro delineador es:
Prefiero la
-eopción pensada, ya que da más control:fuente
Se puede emular
cat >> out.txtcon Perl o Python para lograr el mismo efecto. Perl:Y Python:
Tenga en cuenta que para python deberá presionar Ctrl+ Ddos veces. Consulte la pregunta relacionada sobre stackoverflow para obtener más información.
fuente
Aquí hay un ejemplo para agregar varias líneas en un archivo:
fuente
Además de la principal respuesta, en caso de que el archivo necesita permisos de superusuario, simplemente añadiendo
sudofrenteechono va a funcionar.Esto se debe a que Shell rompe los comandos y, aunque se
echoejecutó como root, pero se>>ejecutó con privilegios normales.Esto funcionará para superusuario:
sudo su -c "echo 'Line 3' >> greetings.txt"fuente
suaquí (sudo suno es bueno). Pero tiene razón en que necesita algo para administrar la redirección de shell; quizásudo sh -c "echo stuff >> file.txt". Sin ahorro neto pero una mejor práctica.