¿Cómo agregar un encabezado y / o pie de página a una secuencia sed o awk?


13

Tengo un montón de resultados pasando por sed y awk.

¿Cómo puedo prefijar la salida con START y sufijo la respuesta con END?

Por ejemplo, si tengo

All this code
on all these lines
and all these

¿Cómo podría obtener:

START
All this code
on all these lines
and all these
END

?

Mi intento fue:

awk '{print "START";print;print "END"}'

pero tengo

...
START
    All this code
END
START
    on all these lines
END
START
    and all these
END

Respuestas:



11

Esto se puede hacer sedcon

sed -e $'1i\\\nSTART' -e $'$a\\\nEND'

1imedios i nsert antes de la línea 1; $asignifica un ppend después de la última línea. La $'…'sintaxis es específica de bash. En otros shells, deberías poder hacer esto con:

sed -e '1i \ Enter
START' -e '$ a \ Enter
END'Enter

8

Si ya está usando sed, puede usar 1para hacer coincidir la primera línea y $para hacer coincidir la última línea (vea la respuesta de Scott ). Si ya está usando awk, puede usar un BEGINbloque para ejecutar código antes de la primera línea y un ENDbloque para ejecutar código después de la última línea (vea la respuesta de Michael Durrant ).

Si todo lo que necesita hacer es agregar un encabezado y un pie de página, simplemente use echoy cat.

echo START
cat
echo END

En una tubería, para ejecutar múltiples comandos, use { … }para decirle al analizador que son un solo comando compuesto.

content-generator |
{ echo START; cat; echo END; } |
postprocessor
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.