如何使用SED合并末尾-前无空白字符的相邻行?
修正SED脚本:仅合并行尾“-”前无空白的行与下一行
原脚本的问题在于匹配了所有以“-”结尾的行,包括“-”前带有空白字符的情况,导致错误合并了line5 -和 line6。只需修改正则匹配条件,即可实现需求。
修正后的脚本
#!/bin/bash file=$1 sed ':a;/[^ \t]-$/{N;s/- //;ba}' "$file"
关键修改说明
- 将原匹配条件
/-$/替换为/[^ \t]-$/:[^ \t]是正则否定字符集,匹配除空格、制表符之外的任意字符,确保只有当行尾的“-”紧邻非空白字符时,才触发合并逻辑。
- 其余逻辑保持不变:
:a定义循环标签;N读取下一行并入当前模式空间;s/- //删除行尾的“-”和换行符;ba回到标签a,循环检查合并后的新行尾。
验证效果
输入内容
line1- line2 line3- line4 line5 - line6
执行修正脚本后的输出
line1- line2 line3line4 line5 - line6
完全符合期望结果,仅合并了line3-与line4,而保留了line5 -和 line6的分行状态。
内容的提问来源于stack exchange,提问作者mitas1c
相关产品推荐
相关产品推荐

