如何使用sed/awk将文件中以set开头的行与前一行合并
文本合并需求解决方案
适配方案
1. GNU sed 实现(兼容4.2.2版本)
核心逻辑为每次读取两行内容,判断第二行是否以set开头,符合条件则合并两行,否则按正常行输出:
# 仅输出结果,不修改原文件 sed 'N;/\nset/s/\n/ /;P;D' 目标文件路径 # 直接修改原文件 sed -i 'N;/\nset/s/\n/ /;P;D' 目标文件路径
2. awk 实现
逻辑更直观,可处理各种边界场景:
awk '{if(/^set/) {print prev " " $0; prev=""} else {if(prev!="") print prev; prev=$0}} END{if(prev!="") print prev}' 目标文件路径
原有命令失效原因
- 你之前使用的sed命令采用全量读入文件后替换的逻辑,
s/\nset//g会直接删除换行和set字符,最终结果会变成previous line...而非预期的带空格拼接,同时如果存在连续多个set开头的行也会处理异常。 - 你之前使用的awk命令存在两个问题:一是
\set属于多余转义,匹配逻辑错误;二是RS=""设置为按空白段落分割,不符合普通文本文件的行处理场景,因此没有生效。
内容的提问来源于stack exchange,提问作者asdf
相关产品推荐
相关产品推荐

