• 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',

    结果为:


    alt

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

    alt

    解决


    通过安装gsed来解决,

    brew install gnu-sed

    然后使用gsed,

    alt

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




    更多相关问题,可参考[1]


    实战一下


    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里添加)

    alt

    又例如,需要将

        city1: /中国/浙江/杭州/余杭/仓前.db
        city2: /中国/浙江/杭州/余杭/闲林.txt
        city3: /中国/浙江/杭州/余杭/中泰.md
    • 1

    改为

        city1: /中国/余杭/仓前.db
        city2: /中国/余杭/闲林.txt
        city3: /中国/余杭/中泰.md
    • 1

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

    alt

    再例如,需要将

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

    改为

        city1: /中国/华东/街道/仓前.db
        city2: /中国/华东/街道/横塘.txt
        city3: /中国/华东/街道/黛溪.md
    • 1

    当然可以

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

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

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

    alt

    其中

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

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


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

    参考资料

    [1]

    更多相关问题,可参考: https://www.google.com/search?newwindow=1&rlz=1C5CHFA_enCN758CN758&sxsrf=ACYBGNRgj_G2k3S1PNhmPd8Zzs-Jfyor2g%3A1574328575244&ei=_1jWXeHFDvTXz7sPn_KXWA&q=sed%E5%91%BD%E4%BB%A4+mac+%E5%8C%BA%E5%88%AB&oq=sed%E5%91%BD%E4%BB%A4+mac+%E5%8C%BA%E5%88%AB&gs_l=psy-ab.3...295935.300081..300238...4.2..0.311.2569.0j2j7j1......0....1..gws-wiz.......0i71j0i12j0i8i30j33i160.jDax8rOLIAk&ved=0ahUKEwihwfL7_vrlAhX063MBHR_5BQsQ4dUDCAs&uact=5

    [2]

    coolshell-SED 简明教程: https://coolshell.cn/articles/9104.html

    本文由 mdnice 多平台发布

  • 相关阅读:
    Kubernetes技术与架构-Ingress
    【教程】部署apprtc服务中安装google-cloud-cli组件的问题及解决
    JVM笔记: JVM内存模型
    ubuntu 将youtube视频搬运到B站
    python 基准测试(cProfile \ kcachegrind \ line_profiler \ memory_profiler)
    Airtest自定义启动器支持批量运行脚本,并兼容在AirtestIDE中使用
    kafka集群与redis集群的概念对应关系
    【吴恩达机器学习笔记】
    [含毕业设计论文+PPT+源码等]ssm校友录网站+Java后台管理系统|前后分离VUE
    【Unity/XLua】xlua自带教程示例分析(8)—— 热修复
  • 原文地址:https://blog.csdn.net/techdashen/article/details/132910158