![除以 00 开头的行外,将所有行中的新行替换为空格:](https://linux22.com/image/173477/%E9%99%A4%E4%BB%A5%2000%20%E5%BC%80%E5%A4%B4%E7%9A%84%E8%A1%8C%E5%A4%96%EF%BC%8C%E5%B0%86%E6%89%80%E6%9C%89%E8%A1%8C%E4%B8%AD%E7%9A%84%E6%96%B0%E8%A1%8C%E6%9B%BF%E6%8D%A2%E4%B8%BA%E7%A9%BA%E6%A0%BC%EF%BC%9A.png)
我有一个像这样的 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:/
.