Eu uso sed
para converter um srt
arquivo em um arquivo de texto normal. An
srt` tem um formato de
1
00:20:41,150 --> 00:20:45,109
line 1
line 2
2
00:21:41,150 --> 00:21:45,109
line 3
line 4
Então eu uso o seguinte comando para remover linhas não textuais
sed -r '/^[0-9]+$/{N;d}' file.srt > file.txt
que produz
line1
line2
line3
line4
mas eu quero pegar
line1 line2
line3 line4
(cada segmento de legenda como uma única linha)
Como eu posso fazer isso?
use isso para obter seu padrão
Você deve ser capaz de fazer isso usando
awk
, operando-o no "modo de parágrafo" (consulte, por exemplo, a solução de @EdMorton aqui e uma solução para o problema "imprimir todos, exceto os primeiros campos" do stackoverflow )Isso interpretará qualquer bloco de texto separado por "linha vazia" como um registro de entrada, cujos campos são as linhas individuais do bloco de texto. O comando acima substituirá os dois primeiros campos (=linhas) pela string "vazia" e imprimirá a linha inteira.
NB que isso deixa dois espaços (o separador de campo de saída) antes da "saída real". Se isso for um problema, você pode imprimir explicitamente apenas os campos restantes com um
awk
loop interno: