MacOS终端Bash中sed替换逗号为换行失败问题排查
解决sed替换逗号为换行符出现"abcnwer"的问题
哈哈,这个坑我之前在macOS上也踩过!你的问题根源在于不同版本的sed对换行符的解析规则不一样:
如果你用的是macOS自带的BSD版本sed,它在替换字符串里的\n不会被识别为换行符,而是直接当成普通的字符n输出,所以原本期望的换行变成了字母n,就出现了abcnwer这种结果。
给你几个靠谱的解决方案:
- 用ASCII十六进制表示换行符(换行的ASCII码是0a),兼容BSD和GNU sed:
echo abc,wer | sed 's/,/\x0a/g' - 用
tr命令替代sed,专门做字符替换,跨平台无版本问题,写法更简单:echo abc,wer | tr ',' '\n' - 如果你坚持用sed,也可以用“反斜杠+直接换行”的写法(注意反斜杠后直接回车,不要加空格):
echo abc,wer | sed 's/,/\ /g'
其中最推荐用tr命令,不仅写法简洁,还完全不用担心sed版本差异的问题~
内容的提问来源于stack exchange,提问作者Elye
相关产品推荐
相关产品推荐

