使用SED指令将字幕文件变成单行文本
我需要将一些字幕文件变成单行的文本,在GNU/Linux系统中完成这样的操作非常容易。我们不需要安装特定的软件,我将使用 SED 指令进行三十几个字幕文本的批处理操作,现在先让我们看看单独的命令:
字幕文件的时间轴是以 00 开头,用命令删除所有00开头的行。-i 是执行修改后保存文件,所以在操作之前最好将字幕文件备份, * 代表全部文件,这样就可以进行批处理,不需要单独的输入字幕文件名:
sed -i '/^00/d' *
字幕文件中有数字开头的序列行,用命令删除所有数字开头的行:
sed -i '/^[0-9]/d' *
删除这些行后会产生空白行,用命令删除所有空白行:
sed -i '/^$/d' *
在文件管理器中(我使用的是PCManFM)找到字幕的文件夹,然后用终端打开当前文件夹(快捷键F4,这样就不需要在终端中cd文件夹的路径,其他文件管理器也可以这样做)使用 && 将以上三条命令连起来粘贴到终端中,按回车键执行后就成为了多行文本:
sed -i '/^00/d' * && sed -i '/^[0-9]/d' * && sed -i '/^$/d' *
如果字幕文件中有html代码,比如说明文字与网址或斜体代码,例子如下:
字幕制作: -♪ <font color="green">时间轴</font>-<font color="red">制作</font>-<font color="yellow">俱乐部</font> ♪- 为你们奉献最好的字幕 https://www.example.com
这样的四行多余的文字,可以删除 字幕制作:这行及其后3行,命令为:
sed -i '/字幕制作:/,+3d' *
用命令删除斜体代码
<i>
,去掉<i>
很容易,’s/填写到这里//g’ 就可以了:sed -i 's/<i>//g' *
去掉
</i>
我们需要把其中的/
转换下样式(因为/
在sed指令中会用到,不转换命令就不正确了)用捺撇\/
代替/
就可以了,这样的命令还需要用双引号"s/<\/i>//g"
命令:sed -i "s/<\/i>//g" *
使用 && 将以上三条命令连起来粘贴到终端中,按回车键执行后删除多余的文字与代码:
sed -i '/字幕制作:/,+3d' * && sed -i 's/<i>//g' * && sed -i "s/<\/i>//g" *
如果不需要变成单行,多行文本现在就已经完成了。我是需要用到单行文本,所以继续~现在为多行文本行尾添加逗号:
sed -i 's/$/,/g' *
然后将多行变为单行:
sed -i ":a;N;s/\\n//g;ta" *
现在已经变成单行文本了,但在行尾是逗号标点,所以替换行尾最后一个字符为句号:
sed -i 's/.$/。/' *
完成。使用 && 将以上三条命令连起来粘贴到终端中,按回车键执行后所有的字幕文件就都变成了单行文本。使用文本编辑器可以打开查看这些文件(我使用Geany做为我的文本编辑器):
sed -i 's/$/,/g' * && sed -i ":a;N;s/\\n//g;ta" * && sed -i 's/.$/。/' *
解释起来需要些文字说明,但执行时这些命令就非常快速,在GNU/Linux系统中也许这些命令不是专门为编辑字幕文件特定的,不过我们可以灵活运用这些命令。
附加: 如果变成单行的文本行尾有特殊字符,比如 :) 这样的微笑字符,那么经过上面的操作会形成这样的字符 空格:)。所以可以使用之前的命令把它都替换成句号:
sed -i 's/ :)。$/。/' *
英文多行文本保存到一个文档中,比如文档名称为 aline ,变成单行文本的命令为:
sed -i 's/$/ /g' aline && sed -i ":a;N;s/\\n//g;ta" aline
感谢观看 :)