求txt文件修改,删除4的倍数行的工具

我有一些srt的双语字幕,只想保留英语字幕,目前我想到的方案是改成txt文件,将txt文件,删除4的倍数行
有啥满足的工具吗,或者有大佬有其他方案吗
因为经常要使用,最好简洁易用点:innocent:

有现成的呀:

如果有Excel的话,倒是可以用这个操作
比如把字幕都粘到A列里
然后在 B2 中输入:

=MOD(A2, 4)

然后快速填充到所有行
然后选中B列,“数据” > “筛选”。
筛选出等于 0 的行,那就是4的倍数的行
然后删除他们
取消筛选
重新把A列的东西粘回
srt文件。

亦或者这么明确的问题,问问AI,让她给你写个python脚本也行
以下为chatgpt的回答:

你可以通过以下步骤快速处理你的 .srt 文件,只保留英文字幕(即保留 3、7、11、15 等“4N-1”行):

  1. 编写一个简单的Python脚本 来读取 .srt 文件并处理行数。
  2. 按行读取 .srt 文件,并只保留那些行号满足 (行号 - 1) % 4 == 2(即英文字幕所在行)。

你可以使用下面的代码来实现这个功能:

def extract_english_subtitles(input_file, output_file):
    with open(input_file, 'r', encoding='utf-8') as infile:
        lines = infile.readlines()

    with open(output_file, 'w', encoding='utf-8') as outfile:
        for i in range(len(lines)):
            # 如果是 (行号 - 1) % 4 == 2 的行,保留该行 (即英文字幕)
            if (i % 4) == 2:
                outfile.write(lines[i])

# 替换 input_file 和 output_file 为你自己的文件路径
input_file = 'path_to_your_input_file.srt'
output_file = 'path_to_your_output_file.srt'

extract_english_subtitles(input_file, output_file)

使用步骤:

  1. 将上述代码保存为一个 Python 文件(如 extract_subtitles.py)。
  2. 将你的 .srt 文件路径替换到 input_file 变量中。
  3. 运行该 Python 脚本,它将生成一个新的 .srt 文件,其中只包含英文字幕。

这样你就能快速批量处理所有双语字幕文件,只保留英文字幕部分。

文件不是太大的话,随便找个AI,比如阿里的KIMI的,然后提出要求发过去文件,解决。
最近都是这样解决一些重复的小问题,发现还不错。

可参考站内相关话题 如何快速分离奇偶行的文本?

1 个赞

如果文件不是特别大(用记事本打开还不至于卡死),可以用 Excel 进行处理:

  1. 用记事本或其他文本编辑器打开文件,复制全部内容
  2. 打开 Excel,新建一个电子表格,在 A1 键入 序号,在 B1 键入 文本
  3. 将文本内容粘贴到 B2
  4. 点击 A2 单元格,然后点击 “开始” 选项卡 → 套用表格格式,随便选一种格式,而后在弹出窗口中勾选 “表包含标题”,并点击确定
  5. 在 A2 单元格中输入 =mod(row()-1.4),输入后按 Enter,Excel 会自动为其他行按此公式填充序号。
  6. 点击表头 “序号” 右侧的下箭头,弹出窗口中去掉 0 前的对号,然后点击 “确定”,这样,所有行号为 4 的倍数的行都会被隐藏。
  7. 选择筛选后 “文本” 列中的所有内容,按 Ctrl + C 复制,然后再到文本编辑器中粘贴,并保存即可。

补充说明:

mod(a,b) 是取余计算函数,比如 7 ÷ 4 = 1 … 3,那么 mod(7,4) 将返回 3。

row() 可以返回当前单元格的行序号,如在 A3 输入 row(),将返回 3。

1 个赞

最简单的命令是 sed “4~4d” filename > newfile

4 个赞

请教一下,我知道 sed '4d' 是删除第 4 行的内容,那么 "4~4d" 这一段的语法该怎么理解?

刚刚粗略地看了下 sed 的手册,这里的语法似乎是 “起始行号~步长”,也就是说,"4~4d" 表示删除文件的第 4 行、4+4=8 行、8+4=12 行……,直到最后一行。应该可以这样理解吧?

理解的没问题
命令 sed "4~4d" 的解释如下:

  • 4:指定从第 4 行开始。
  • ~:这是一个步进(step)操作符,用于指定重复的模式。
  • 4:紧随 ~ 之后,表示每隔 4 行。
  • d:这是一个删除命令,用于删除匹配的行。

所以,整个命令 sed "4~4d" 的作用是从输入文本的第 4 行开始,每隔 4 行删除一行。换句话说,它会删除第 4 行、第 8 行、第 12 行,以此类推。

例如,如果你有一个包含以下文本的文件:

复制

第1行
第2行
第3行
第4行
第5行
第6行
第7行
第8行
第9行
第10行
第11行
第12行
第13行
第14行
第15行

在运行 sed "4~4d" 命令后,输出将会是:

复制

第1行
第2行
第3行
第5行
第6行
第7行
第9行
第10行
第11行
第13行
第14行
第15行

可以看到,第 4 行、第 8 行和第 12 行被删除了。

2 个赞

一行正则搞定:
((?:^.*$\n){3})^.*$\n 替换为 $1 即可。

2 个赞

已经写过类似工具了.

可以自定义间隔行数.

https://meta.appinn.net/uploads/default/original/3X/d/6/d6d6cac0d28fc5cdf964869ac6c2840ffa9d87bc.png

setlocal enabledelayedexpansion
for /f "tokens=* delims=" %%a in (%1) do (
    set /a "linenumber+=1"
    if !linenumber! lss 4  echo %%a>>"out %time::=.%.txt"
    if !linenumber! equ 4  set /a "linenumber=0")

把以上代码保存为纯文本文件,更改后缀名为bat,把待处理文本拖到bat上运行

1 个赞