如何使用SED替换空格+换行符?文本合并需求求助
用SED合并拆分的文本行
原始输入文本:
jono| Jakarta|smp jojon|jakarta|smp jojo|bandung|sma riki| Jakarta|smk
期望输出:
jono|Jakarta|smp jojon|jakarta|smp jojo|bandung|sma riki|Jakarta|smk
你之前的两条SED命令失效原因:
- 第一条命令正则写法错误:字符组
[|\s^[[:space:]]*$]里的^、$等锚点被当成普通字符,且未处理换行场景,根本匹配不到目标内容。 - 第二条命令尝试匹配跨行的
|\s\n,但SED默认逐行处理文本,模式空间里不会包含换行符(除非主动读取下一行),所以匹配永远不会触发。
正确的SED命令:
sed -i '/|[:space:]]*$/{N;s/|[[:space:]]*\n/|/}' tes.txt
命令解释:
/|[:space:]]*$/:匹配所有以|加任意数量空白字符结尾的行{N;...}:对匹配到的行执行操作块:N:读取下一行内容到当前模式空间,此时模式空间包含两行内容(用换行分隔)s/|[[:space:]]*\n/|/:把|后面的空白字符+换行符替换成单个|,完成两行合并
如果是BSD sed环境(比如macOS),需把-i改成-i '',避免生成备份文件:
sed -i '' '/|[:space:]]*$/{N;s/|[[:space:]]*\n/|/}' tes.txt
内容的提问来源于stack exchange,提问作者yaafi asyari
相关产品推荐
相关产品推荐

