如何使用sed为匹配输出的各段结果添加自定义分隔符
sed提取匹配内容后追加自定义分隔符的实现方法
你原本用的范围匹配提取逻辑不用大改,只要在匹配到每段结束位置时加上指定分隔符就行,不需要拼接其他额外命令,单条sed就能实现需求。
可直接复用的命令
针对你提供的test.txt场景,直接执行下面的命令就能得到带分号分隔符的目标输出:sed --quiet '/Hello/,/test/{/test/s/$/;/p}' test.txt
如果你习惯用cat管道的写法,也可以用等价版本,效果完全一致:cat test.txt | sed --quiet '/Hello/,/test/{/test/s/$/;/p}'
命令逻辑拆解
/Hello/,/test/保留你原来的范围匹配规则:锁定所有以Hello为起始标识、以test为结束标识的文本段- 大括号内的
/test/s/$/;/是加分隔符的核心逻辑:在已经匹配到的范围内,找到带结束标识test的行(也就是每一段匹配结果的最后一行),执行替换操作,把行尾位置(正则中$代表行尾)替换成你要的分隔符,示例里用的是分号;,你可以根据需要换成任意字符或者字符串 - 最后的
p是打印指令,和--quiet参数配合,只会输出符合匹配规则的内容,不会打印无关行
输出效果
执行上述命令后,输出和你预期的格式化结果完全一致:
Hello my name is test; Hello Hello test; Hello my name already is test;
这个写法同时兼容跨多行的匹配场景:如果后续你的文本里出现Hello开头和test结尾不在同一行的内容段,命令也只会在整个匹配段的最后一行末尾加分隔符,不会给段内的中间行误加内容。
内容的提问来源于stack exchange,提问作者HT256
相关产品推荐
相关产品推荐

