Mac OS下sed循环无法正常工作(原Linux可用)求助
Mac下sed删除换行符失效的解决方案
Mac自带的是BSD版本sed,和Linux上的GNU sed语法有差异,这就是你原来的命令失效的核心原因。给你两个可行的解决方法:
方法1:用tr命令(简单高效,跨平台兼容)
直接用tr命令删除所有换行符,不用纠结sed的版本差异:
tr -d '\n' < temp
方法2:适配BSD sed的写法
如果一定要用sed,调整脚本为BSD兼容的版本:
sed -e ':a' -e 'N' -e '$!ba' -e 's/\n//g' temp
脚本逻辑说明:
:a定义一个循环标签N将下一行内容追加到当前处理空间中$!ba只要当前不是最后一行,就跳回标签继续循环,直到把所有行都读入处理空间s/\n//g一次性替换掉处理空间内所有的换行符
你原来的命令失效,主要是因为BSD sed在跳转逻辑、换行符处理上和GNU sed存在细节差异,调整后即可正常运行。
内容的提问来源于stack exchange,提问作者Abid Ghufran
相关产品推荐
相关产品推荐

