如何删除文本文件中*Plasticity与*Hardening标签间的行并插入新数据
我来给你分享几个靠谱的解决方案,不管你习惯用脚本还是命令行工具,都能轻松完成这个文本替换需求:
使用Python脚本实现(适合灵活处理新数据的场景)
如果需要自定义新数据的生成逻辑,或者跨平台使用,Python脚本是最稳妥的选择:
# 定义输入输出文件路径 input_file = "your_input_file.txt" output_file = "your_output_file.txt" # 要匹配的起始/结束标签 start_tag = "*Plasticity, dependencies=1" end_tag = "*Hardening" # 准备要插入的新数据行(可根据需求自由修改行数和内容) new_data = [ "1.11e+06, 50.0, 0.2, 0.01, 0.01, 1., , 0.5", "2.22e+06, 60.0, 0.3, 0.01, 0.01, 1., , 0.6", "3.33e+06, 70.0, 0.4, 0.01, 0.01, 1., , 0.7" ] # 逐行处理文件 with open(input_file, 'r') as f_in, open(output_file, 'w') as f_out: skip_mode = False for line in f_in: line_content = line.rstrip('\n') # 保留原换行逻辑 if line_content == start_tag: # 写入起始标签,然后插入新数据 f_out.write(f"{line_content}\n") for data_line in new_data: f_out.write(f"{data_line}\n") skip_mode = True continue if line_content == end_tag: # 写入结束标签,关闭跳过模式 f_out.write(f"{line_content}\n") skip_mode = False continue # 非跳过模式下,正常写入原行 if not skip_mode: f_out.write(f"{line_content}\n")
代码说明:脚本会自动识别两个标签的位置,跳过中间所有旧内容,插入你自定义的新数据,其他行完全保留原格式。
使用sed命令实现(适合Linux/macOS快速命令行操作)
如果习惯用命令行,sed可以快速完成替换,分两种场景:
场景1:新数据保存在单独文件中(比如new_data.txt)
# GNU sed(Linux) sed -e '/^\*Plasticity, dependencies=1$/,/^\*Hardening$/{//!d; r new_data.txt}' input.txt > output.txt # macOS sed(需加-E参数,换行符处理略有不同) sed -E -e '/^\*Plasticity, dependencies=1$/,/^\*Hardening$/{//!d; r new_data.txt' -e '}' input.txt > output.txt
场景2:直接在命令中写少量新数据
sed -e '/^\*Plasticity, dependencies=1$/,/^\*Hardening$/{//!d; a\1.11e+06, 50.0, 0.2, 0.01, 0.01, 1., , 0.5\ 2.22e+06, 60.0, 0.3, 0.01, 0.01, 1., , 0.6}' input.txt > output.txt
命令说明:/start/,/end/匹配标签区间,//!d删除区间内除标签外的所有行,r或a\用来插入新内容。
使用awk命令实现(命令行中更灵活的文本处理)
awk比sed更适合处理复杂逻辑,同样支持两种场景:
场景1:新数据保存在单独文件中
awk -v start="*Plasticity, dependencies=1" -v end="*Hardening" ' $0 == start { print; while ((getline line < "new_data.txt") > 0) print line; skip=1; next } $0 == end { skip=0; print; next } !skip { print } ' input.txt > output.txt
场景2:直接在awk中定义新数据
awk -v start="*Plasticity, dependencies=1" -v end="*Hardening" ' BEGIN { new_data[1] = "1.11e+06, 50.0, 0.2, 0.01, 0.01, 1., , 0.5" new_data[2] = "2.22e+06, 60.0, 0.3, 0.01, 0.01, 1., , 0.6" } $0 == start { print; for (i in new_data) print new_data[i]; skip=1; next } $0 == end { skip=0; print; next } !skip { print } ' input.txt > output.txt
命令说明:通过标记变量skip控制是否跳过行,遇到起始标签时插入新数据,逻辑清晰易修改。
内容的提问来源于stack exchange,提问作者Ashish
相关产品推荐
相关产品推荐

