如何提取包含时间戳的行之间的文本?

如何提取包含时间戳的行之间的文本?

我正在寻找对现有文件进行文本处理的方法,并将算法的输出输出到新文件中。我原以为这是一项简单的任务,但它让我感到困惑,可能是因为我现在不知道 ls、cat 和 awk。

我有一个现有的非常大的文本文件,其格式如下:

00:02:00.100 --> 00:02:00.100
BLAH BLAH BLAH 

00:02:00.100 --> 00:02:00.100
BLAH BLAH BLAH

我基本上只是想输出一个 txt 文件

BLAH BLAH BLAH BLAH BLAH BLAH

我或许可以创建一个 Word 宏来执行此操作,甚至可以更正全部大写。

到目前为止,我已经

cat file.vtt | grep -v [0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9][[:space:]][[:punct:]][[:punct:]][[:punct:]][[:space:]][0-9][0-9]:[0-9][0-9]:[0-9][0-9].[0-9][0-9][0-9]

结果输出到屏幕上,并且肯定删除了时间码戳,但我实在想不出如何删除时间码之间的硬回车,只让文本行流动。

现有文本文件还使用 >> 来表示硬回车。我能否以某种方式将其合并到字符串中,以便在现有文件中每次出现 >> 时插入回车符?

最后,我究竟怎样才能用字符串的输出覆盖原始的 xyz.txt?

答案1

假设file.vtt遵循 Unix/Linux 风格\n而不是 Windows 风格\r\n回车符(如果没有,则运行dos2unix第一的。) ... 然后,

awk '!/-->/ {sub(">>","\n"); printf("%s ", $0)}' file.vtt > xyz.txt 

将匹配并打印file.vtt不包含的行(在中)-->,同时删除任何行\n并替换>>\n(新行),然后将输出重定向到xyz.txt(如果存在则覆盖其内容,如果不存在则创建它)。

或者,编辑原始文件file.vtt警告...更换其内容),而是gawk像这样使用:

gawk -i inplace '!/-->/ {sub(">>","\n"); printf("%s ", $0)}' file.vtt

相关内容