除以 00 开头的行外,将所有行中的新行替换为空格:

除以 00 开头的行外,将所有行中的新行替换为空格:

我有一个像这样的 vtt 文件(字幕),我想仅在不以行00:和/或空行开头的行上用空格替换新行。

所以这:

00:07:44,759 --> 00:07:49,072
Quando comincio a lavorare?
Subito.

00:07:49,199 --> 00:07:53,512
Prendi quella poltrona e portala
in laboratorio. Quella?

00:07:53,639 --> 00:07:58,839
Fai aftene'ione, mi raccomando.
lo vado in Comune. Arrivederci.

00:07:58,959 --> 00:08:01,952
Arrivederci.
Fate i bravi ragae'e'i.

将转向这个:

00:07:44,759 --> 00:07:49,072
Quando comincio a lavorare? Subito.

00:07:49,199 --> 00:07:53,512
Prendi quella poltrona e portala in laboratorio. Quella?

00:07:53,639 --> 00:07:58,839
Fai aftene'ione, mi raccomando. lo vado in Comune. Arrivederci.

00:07:58,959 --> 00:08:01,952
Arrivederci. Fate i bravi ragae'e'i.

每个块中可能有一行或两行字幕。

我尝试sed删除新行,同时忽略那些以00:或包含开头的行-->,但没有找到方法。

我想我可以编写一个 bash 脚本来逐行读取文件并采取相应的操作,但我很确定sed也可以只用一行来完成。

答案1

sed '/^$\|-->/!{
    N
    /\n$/!s/\n/ /
}' file
  • /^$\|-->/!如果行既不为空也不包含-->;
  • N将下一行追加到模式空间。
  • /\n$/!s/\n/ /如果附加的行不为空,则用空格替换换行符。

示例输入(这包含第二个块中的单行字幕,正如OP评论的那样,它们可以显示出来):

00:07:49,199 --> 00:07:53,512
Prendi quella poltrona e portala
in laboratorio. Quella?

00:07:58,959 --> 00:08:01,952
Arrivederci.

00:07:58,959 --> 00:08:01,952
Arrivederci.
ABC.

输出:

00:07:49,199 --> 00:07:53,512
Prendi quella poltrona e portala in laboratorio. Quella?

00:07:58,959 --> 00:08:01,952
Arrivederci.

00:07:58,959 --> 00:08:01,952
Arrivederci. ABC.

注意:正如 @binarysta 评论的那样,如果视频长度超过一小时,-->则比检测标题更可靠。00:如果您确实愿意00:,可以将第一个正则表达式更改为/^$\|^00:/.

相关内容