如何用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
相关产品推荐
相关产品推荐

