求助:如何用sed实现行尾为=时将下一行追加到当前行?
解决sed合并以=结尾行的问题
嘿,我来帮你修复这个sed命令的问题!你之前的命令失效,核心原因是正则匹配写错了——你用的/\$/是匹配以$符号结尾的行,而不是以=结尾的行,这就导致sed根本找不到你要处理的目标行。
正确的sed命令
直接把匹配规则改成/=$/($是行尾锚点,=$就表示行的最后一个字符是=),完整命令如下:
sed -e :a -e '/=$/N; s/=\n//; ta'
命令各部分解释
:a:定义一个名为a的标签,用来实现循环处理/=$/N:匹配所有以=结尾的行,然后用N命令把下一行追加到当前模式空间(两行合并成一个模式空间,中间用换行符分隔)s/=\n//:把模式空间里的=+换行符替换为空,完成两行的合并操作ta:如果之前的替换操作成功(也就是确实合并了行),就跳转到标签a继续循环——这一步是为了处理连续多行以=结尾的情况(比如行1=,行2=,行3,会把三行直接合并成一行)
示例演示
假设你的输入文件test.txt内容是:
apple= banana orange= grape= pear
执行命令sed -e :a -e '/=$/N; s/=\n//; ta' test.txt后,输出会是:
applebanana orangegrapepear
简化版(仅合并一次)
如果你的场景里不会出现连续多行以=结尾的情况,也可以去掉循环逻辑,用更简洁的命令:
sed '/=$/{N; s/=\n//}'
内容的提问来源于stack exchange,提问作者msquaza
相关产品推荐
相关产品推荐

