我用来sed
将srt
文件转换为常规文本文件。An
srt` 文件的格式为
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
所以我使用以下命令删除非文本行
sed -r '/^[0-9]+$/{N;d}' file.srt > file.txt
产生
line1
line2
line3
line4
但我想得到
line1 line2
line3 line4
(每个字幕段作为一行)
我怎样才能做到这一点?
答案1
用它来获取你的模式
sed ':begin;$!N;s/\n/ /;tbegin' file.txt | sed 's/ /\n/g'
答案2
您应该能够使用以下方法来完成此操作awk
通过在“段落模式”下操作它来完成此操作(例如,参见@EdMorton的解决方案这里以及“打印除第一个字段之外的所有字段”问题的解决方案来自堆栈溢出)
awk -v RS= -F'\n' '{$1=$2=""; print $0}' file.srt > file.txt
这会将任何“空行”分隔的文本块解释为一个输入记录,其字段是文本块的各个行。然后,上述命令将用“空”字符串替换前两个字段(=行)并打印整行。
请注意,这会在“实际输出”之前留下两个空格(输出字段分隔符)。如果这是一个问题,您可以使用 -internal 循环显式仅打印剩余字段awk
:
awk -v RS= -F'\n' '{for (i=3; i<NF; i++) printf("%s ",$i); printf("%s\n",$NF)}' file.srt > file.txt