You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python删除文本文件中指定关键词的上一行

删除包含指定内容行的上一行的实现方法

方法1:使用sed命令

sed是Linux/Unix下常用的文本处理工具,通过模式匹配和空间操作可快速实现需求:

sed -e '$!N;/Ctrl+S/{s/.*\n//;P;D};P;D' file.txt > output.txt

命令解释:

  • $!N:除最后一行外,将下一行内容读入当前模式空间,形成「上一行\n当前行」的结构
  • /Ctrl+S/{...}:如果模式空间内包含Ctrl+S,执行花括号内操作:
    • s/.*\n//:删除换行符之前的所有内容(即要移除的上一行)
    • P:打印模式空间中换行符之前的部分
    • D:删除模式空间中换行符之前的部分,重新开始循环处理剩余内容
  • P;D:如果不匹配Ctrl+S,则打印上一行并移除,继续处理下一行
    执行后,处理后的内容会保存到output.txt中。

方法2:使用awk命令

awk擅长按行处理文本,通过记录上一行内容实现逻辑判断:

awk 'prev { if ($0 !~ /Ctrl+S/) print prev; } { prev = $0; } END { print prev; }' file.txt > output.txt

命令解释:

  • prev { ... }:当prev变量有值(非第一行)时,判断当前行是否包含Ctrl+S,不包含则打印上一行
  • prev = $0:将当前行内容赋值给prev,作为下一次循环的「上一行」
  • END { print prev; }:循环结束后打印最后一行,避免遗漏

方法3:使用Python脚本

如果需要跨平台或更灵活的处理逻辑,可使用Python脚本实现:

with open('file.txt', 'r', encoding='utf-8') as input_file, open('output.txt', 'w', encoding='utf-8') as output_file:
    previous_line = None
    for current_line in input_file:
        if previous_line is not None:
            if 'Ctrl+S' not in current_line:
                output_file.write(previous_line)
        previous_line = current_line
    # 写入最后一行
    if previous_line is not None:
        output_file.write(previous_line)

使用说明:

将代码保存为remove_prev_line.py,终端执行python remove_prev_line.py即可,处理后的内容会保存到output.txt。


内容的提问来源于stack exchange,提问作者P Moto500

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 09:18:13