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 sed
o awk
segú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
cat
significa 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
.