sed命令在Mac和Linux下的不同

问题

(1)Windows系统里,文件每行结尾是'<回车><换行>', '\r\n'
(2)Mac系统里, 文件每行结尾是'<回车>',即'\r'
(3)Unix系统里, 文件每行结尾是'<换行>',即'\n'
所以,用'\n'作为作为换行符的文件,用Windows的记事本打开时 会没有换行;
而用'\r\n'作为换行符的文件(windows文件),用Linux或mac的vim打开时 会将\r显示成^M。

echo "a,b,c,d"

在Mac或Linux系统下,以上结果皆为
a,b,c,d

现用sed,将","替换为换行, Linux系统下执行

echo "a,b,c,d" |sed 's/,/\n/g',

结果为:

相同命令,在Mac下执行结果则为:

解决

通过安装gsed来解决,

brew install gnu-sed

然后使用gsed,

在bash_profile中加一条alias,用gsed替换掉sed


更多相关问题,可参考

实战一下

sed -i 's#老的路径#新的路径#g' 目标文件地址

在某大厂服务器,从虚拟机向容器迁移过程中,需要改写配置文件中日志和ip库文件的位置。

例如,需将原文件中log_path由 /home/google/log/service/qa/改为/home/appops/logs/service/qa/

执行 sed -i 's#/home/google/log#/home/microsoft/logs#g' config.yml

(一般在Makefile里添加)

又例如,需要将

yaml 复制代码
    city1: /中国/浙江/杭州/余杭/仓前.db
    city2: /中国/浙江/杭州/余杭/闲林.txt
    city3: /中国/浙江/杭州/余杭/中泰.md

改为

yaml 复制代码
    city1: /中国/余杭/仓前.db
    city2: /中国/余杭/闲林.txt
    city3: /中国/余杭/中泰.md

可以执行 sed -i 's#/中国/浙江/杭州#/中国#g' config.yml

再例如,需要将

yaml 复制代码
    city1: /中国/浙江/杭州/余杭/街道/仓前.db
    city2: /中国/江苏/苏州/虎丘/街道/横塘.txt
    city3: /中国/山东/滨州/邹平/街道/黛溪.md

改为

yaml 复制代码
    city1: /中国/华东/街道/仓前.db
    city2: /中国/华东/街道/横塘.txt
    city3: /中国/华东/街道/黛溪.md

当然可以

yaml 复制代码
sed -i 's#/中国/浙江/杭州/余杭/仓前.db#/中国/华东/余杭/仓前.db#g' config.yml
sed -i 's#/中国/江苏/苏州/虎丘/横塘.txt#/中国/华东/虎丘/横塘.txt#g' config.yml
sed -i 's#/中国/山东/滨州/邹平/黛溪.md#/中国/华东/邹平/黛溪.md#g' config.yml

但更好的办法,是使用通配符

sed -i 's#/中国/.*街道#/中国/华东/街道#g' config.yml

其中

  • . 表示任何单个字符
  • * 表示某个字符出现了0次或多次

's#/中国/.*街道#/中国/华东/街道#g' 也就是 把'中国/xxxxxx任意多个字符xxxxx街道',替换为'中国/华东/街道'

更多可参考 coolshell-SED 简明教程

相关推荐
wuminyu2 小时前
JVM规范学习总结:解释器与JIT编译器如何处理JVM字节码
java·linux·c语言·jvm·c++
ZhengEnCi2 小时前
模型训练完整流程:从数据准备到模型上线的 10 个关键步骤(全文可跑)
后端·算法
王中阳Go2 小时前
后端转 Agent 岗面试怎么答:8 个高频问题与应答口径
人工智能·后端·python·大语言模型
程序猿DD2 小时前
OctaFuse Gateway 2.18.0:MCP 接入支持 OAuth,供应商粘性绑定可视化管理
后端
IMPYLH3 小时前
Linux 的时间为什么会被拨回去
linux·运维·服务器
ZhengEnCi4 小时前
Agent 规则管理:让 Memory 做索引、让 Skill 存规则——上下文上限实测与分工方案
后端
叼烟扛炮4 小时前
[Git 实战] 学习笔记:从生成 SSH 密钥到解决 TortoiseGit 推送报错全指南
linux·运维·笔记·git·学习
nice_lcj5205 小时前
深入理解 Java 反射:从 Class 对象到方法调用(含性能实测 + 迷你 IOC 实战 + 面试考点)
java·开发语言·后端·面试
xbzb5 小时前
OpenStack 网络管理(理论):Linux 网络虚拟化是 Neutron 的地基
linux·服务器·网络·openstack·network·neutron
骑着蜗牛撵大象3275 小时前
2026 后端 AI 工程化:Spring AI 管调用、MCP 管工具、Agent 内嵌管自治
java·人工智能·后端·spring·ai·可观测性·mcp