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 简明教程

相关推荐
开心就好20253 分钟前
不同阶段的 iOS 应用混淆工具怎么组合使用,源码混淆、IPA混淆
后端·ios
架构师沉默11 分钟前
程序员如何避免猝死?
java·后端·架构
椰奶燕麦28 分钟前
Windows PackageManager (winget) 核心故障排错与通用修复指南
后端
zjjsctcdl1 小时前
springBoot发布https服务及调用
spring boot·后端·https
123过去1 小时前
pixiewps使用教程
linux·网络·测试工具·算法·哈希算法
zdl6862 小时前
Spring Boot文件上传
java·spring boot·后端
世界哪有真情2 小时前
哇!绝了!原来这么简单!我的 Java 项目代码终于被 “拯救” 了!
java·后端
RMB Player2 小时前
Spring Boot 集成飞书推送超详细教程:文本消息、签名校验、封装工具类一篇搞定
java·网络·spring boot·后端·spring·飞书
重庆小透明2 小时前
【搞定面试之mysql】第三篇 mysql的锁
java·后端·mysql·面试·职场和发展
H_老邪2 小时前
Linux 与 Docker 常用命令
linux·运维·服务器·docker