Puedo hacer cat file.txtpara obtener el contenido de un archivo, pero también quiero agregar una línea final de mi elección.
Traté de tuberías (cat file.txt ; echo "My final line") |pero solo la línea final pasa a través de la tubería. ¿Cómo puedo unirme al gato y a la línea final?
Edite para un punto de aclaración: no deseo modificar el archivo en sí. Soy consciente de que si este fuera el caso, podría hacerlo echo "My final line" >> file.txto echo "My final line" | tee -a file.txtsolo estoy tratando de hacer el anexo dentro del contexto de este comando en particular para poder canalizar la concatenación de file.txty "My final line".
command-line
pipe
cat
echo
Contrabajo
fuente
fuente

echo "My final line" >> file.txt?>>si quisiera editar el archivo en sí.file.txt? Su fragmento de tubería debería funcionar.Respuestas:
Puede aprovechar
catla capacidad de leer de stdin combinada con su capacidad de leer múltiples archivos para lograr esto.También puede anteponer una línea, como tal:
Tenga en cuenta que no está limitado a una sola línea.
catleerá desde stdin hasta que llegue a EOF. Puede pasar la salida decurl, por ejemplo, para anteponer o agregar a la salida decat.fuente
(cat file.txt ; echo "My final line") | …También lo haría. Pero usarcatpara lo que fue diseñado es mejor +1.echo "$$" "$BASHPID" | head -q -n 1 /proc/mounts - | catvs.( head -q -n 1 /proc/mounts; echo "$$" "$BASHPID" ) | cato incluso{ head -q -n 1 /proc/mounts; echo "$$" "$BASHPID"; } | cat.Para agregar una línea a un archivo, puede usar el operador de redirección de adición de shell,
>>(el archivo se agregará con unaopen(2)marcaO_APPEND):Ahora, si solo desea ver el contenido del archivo con una línea final agregada, lo usaría
catcon dos argumentos:file.txtcatsolo trata con archivos) puede aprovechar la sustitución del proceso<(), que devolvería un descriptor de archivo (/proc/self/fd/<fd_number>).Poniendo estos juntos:
Si desea que la salida sea paginada, suponiendo que
lesssea su localizador favorito:fuente
<()funciona para bash, pero ¿para qué otros proyectiles funciona? Ksh? ¿Guión?ksh,zsh- Sí,dash- No.De
man sedla opción-e$coincide con la última línea yaagrega la cadena.Si desea agregar permanentemente la línea al archivo, use
-iCambiar el comando a
fuente
Ya se aclaró en los comentarios a la pregunta, pero se agregó nuevamente como respuesta aquí.
El comando anotado en la pregunta,
funciona como se espera: toda la salida del subshell formado por paréntesis se canaliza al segundo comando.
Si el archivo no termina con una nueva línea, la cadena con eco se agrega a la última línea; esto es común con todas las otras soluciones aquí, y se puede resolver agregando otro eco (vacío) antes.
fuente
awk:awk 1 file.txt; echo "My final line".awk 1 filees un buen truco para compensar la falta de EOL al final del archivo.echo "\nMy final line"sin tener que depender de élawk