使用SED指令将字幕文件变成单行文本

我需要将一些字幕文件变成单行的文本,在GNU/Linux系统中完成这样的操作非常容易。我们不需要安装特定的软件,我将使用 SED 指令进行三十几个字幕文本的批处理操作,现在先让我们看看单独的命令:

  1. 字幕文件的时间轴是以 00 开头,用命令删除所有00开头的行。-i 是执行修改后保存文件,所以在操作之前最好将字幕文件备份, * 代表全部文件,这样就可以进行批处理,不需要单独的输入字幕文件名:

    sed -i '/^00/d' *
    
  2. 字幕文件中有数字开头的序列行,用命令删除所有数字开头的行:

    sed -i '/^[0-9]/d' *
    
  3. 删除这些行后会产生空白行,用命令删除所有空白行:

    sed -i '/^$/d' *
    

在文件管理器中(我使用的是PCManFM)找到字幕的文件夹,然后用终端打开当前文件夹(快捷键F4,这样就不需要在终端中cd文件夹的路径,其他文件管理器也可以这样做)使用 && 将以上三条命令连起来粘贴到终端中,按回车键执行后就成为了多行文本:

sed -i '/^00/d' * && sed -i '/^[0-9]/d' * && sed -i '/^$/d' *

  1. 如果字幕文件中有html代码,比如说明文字与网址或斜体代码,例子如下:

    字幕制作:
    -♪ <font color="green">时间轴</font>-<font color="red">制作</font>-<font color="yellow">俱乐部</font> ♪-
    为你们奉献最好的字幕
    https://www.example.com
    

    这样的四行多余的文字,可以删除 字幕制作:这行及其后3行,命令为:

    sed -i '/字幕制作:/,+3d' *
    
  2. 用命令删除斜体代码 <i>,去掉 <i> 很容易,’s/填写到这里//g’ 就可以了:

    sed -i 's/<i>//g' *
    
  3. 去掉 </i> 我们需要把其中的 / 转换下样式(因为/在sed指令中会用到,不转换命令就不正确了)用捺撇 \/ 代替 / 就可以了,这样的命令还需要用双引号 "s/<\/i>//g" 命令:

    sed -i "s/<\/i>//g" *
    

使用 && 将以上三条命令连起来粘贴到终端中,按回车键执行后删除多余的文字与代码:

sed -i '/字幕制作:/,+3d' * && sed -i 's/<i>//g' * && sed -i "s/<\/i>//g" *

  1. 如果不需要变成单行,多行文本现在就已经完成了。我是需要用到单行文本,所以继续~现在为多行文本行尾添加逗号:

    sed -i 's/$/,/g' *
    
  2. 然后将多行变为单行:

    sed -i ":a;N;s/\\n//g;ta" *
    
  3. 现在已经变成单行文本了,但在行尾是逗号标点,所以替换行尾最后一个字符为句号:

    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

感谢观看 :)

森林OS (SenlinOS) avatar
森林OS (SenlinOS)
Comics Art with GNU/Linux
yuyu
yuyu1
Up