Usar un script de shell para agregar un '' después de la última línea en un archivo grande

Usar un script de shell para agregar un '' después de la última línea en un archivo grande

Necesito un comando SED, o AWK, para encontrar la última línea de un archivo y agregarle </pre>.

Como:

LINELINELINE

Cambios a:

LINELINELINE</pre>

Respuesta1

También puedes utilizar lo que se conoce comocomando compuesto.Esa es una lista de comandos, que el shell trata como un comando único para cualquier cosa externa al comando compuesto.

Sí, esa es una definición algo recursiva; un ejemplo hace que sea más fácil de entender.

Por ejemplo, para rodear un archivo con <pre>y </pre>, puede usar un comando como:

( printf '<pre>' ; cat originalfile ; printf '</pre>' ) > newfile

Si no tiene un archivo temporal, sino que desea rodear la salida de algún comando con algo más, puede inyectar ese comando en lugar de cat:

( printf '<pre>' ; find / -type d -print ; printf '</pre>' ) > somefile

Todo esto funciona aplicando la redirección a la salida del comando compuesto completo, en lugar de solo a sus partes.

Por supuesto, esto no utiliza sedo awksegún lo solicitado, pero para este tipo de tarea, recurrir a esas herramientas es bastante excesivo.

Respuesta2

Qué tal esto:

echo "</pre>" >> /path/to/the/file

O al principio es un poco más complicado, necesitarías usar un archivo diferente para la salida.

echo "<pre>" | cat - /path/to/the/file > /path/to/the/newfile

catsignifica concatenar, y tiene dos argumentos en este caso: -significa stdin, por lo que la primera parte del archivo concatenado es lo que se le canaliza (en este caso echo). El segundo argumento es el archivo al que desea anteponer. Los archivos concatenados luego se envían a newfile.

Respuesta3

Con (GNU) sed(según la etiqueta de la pregunta):

$ sed -i -e '$a\</pre>' file.in

Esta voluntadagregaruna línea con </pre>en él a file.in.

Alternativamente:

$ sed -i -e '$s@\(.*\)@\1</pre>@' file.in

Esto se agregará </pre>a la última línea en file.in.

información relacionada