Por ejemplo, transfiera a continuación
00:00:10.730
this presentation is delivered by the
00:00:13.230
Stanford center for professional
00:00:14.610
development okay so let's get started
00:00:25.500
with today's material so um welcome back
00:00:32.399
to the second lecture what I want to do
a
00:00:10.730 --> 00:00:13.230
this presentation is delivered by the
00:00:13.230 --> 00:00:14.610
Stanford center for professional
00:00:14.610 --> 00:00:25.500
development okay so let's get started
00:00:25.500 --> 00:00:32.399
with today's material so um welcome back
00:00:32.399
to the second lecture what I want to do
text-processing
awk
sed
video-subtitles
arroyo hong
fuente
fuente

Respuestas:
En aras de la claridad del código, estamos utilizando
GNU sed:Resultados
Explicación
fuente
Con un enfoque de gawk único para archivos relativamente "pequeños" (por tamaño):
La salida:
fuente
Con GNU
sedytac:Lo mismo podría escribirse con tradicional
sed(es decir, sin-E), pero sería más detallado.Con GNU
awkytac:Tenga en cuenta que la
awkversión puede manejar intervalos de tiempo como00:00:14.610 --> 00:00:25.500en el archivo de entrada, mientras que lasedversión es engañada por ellos.Tenga en cuenta también que
tacse puede emular consed:o así:
Sin embargo, ambos formularios cargarán todo el archivo de entrada en la memoria, por lo que no son muy eficientes.
Resultado:
fuente
Veo bucles o tuberías a otras herramientas en las respuestas dadas, y no me gusta eso si no es necesario. Me gustan las frases sencillas:
Pero vamos paso a paso:
^[0-9:.]+$como expresión regular extendida para la línea de marca de tiempo. Esto debería ser suficiente en el mundo real, pero siéntase libre de hacerlo más preciso. Utilizo este patrón como una dirección, por lo que todo dentro del{}par se ejecuta solo para las líneas de marca de tiempo.sedHespacio anterior yxcambiamos el patrón y mantenemos el espacio. De esta manera, la marca de tiempo actual ya está guardada en el espacio de espera para el siguiente ciclo, mientras que todo lo que necesitamos está en el espacio del patrónsubstitute:s/(.*)\n(.*)\n(\n)(.*)/\1 --> \4\3\2\3/-\1es la marca de tiempo de inicio,\2es la línea de texto,\3es una nueva línea (la necesitamos en el reemplazo, pero POSIX no define\nen el reemplazo) y\4es la marca de tiempo de finalización. Parece más complicado de lo que es.pa lasubicación y luegodelegir el espacio del patrón nos evita la salida no deseada para la primera línea cuando el espacio de espera todavía estaba vacío.Hespacio anterior yxcambie de nuevo los búferes, de modo que las líneas recogidas en el espacio de espera se imprimirán incluso sin cerrar la marca de tiempoSi alguien todavía siente
sedque no es elegante, no puedo evitarlo.fuente