• [Shell]sed命令在MAC和Linux下的不同使用方式


    ----------------------------------------------------------------------------------------------------------------------------

    **********************

    2017-1-13:初版

    **********************

    小记:用MAC工作已经三周,本以为已经完全了解MAC与Windows的各种不同,没想到这两天被Shell给摆了一道,mac下的shell和linux下竟然有些许的不同,由此耽误了我3个小时的宝贵时间,特此吐槽,做个整理。

    ------------------------------------------------------------------------------------------------------------------------------

    对于shell小白的我,先看这里比较详细的sed简明教程,针对linux的用法。

    SED 简明教程

    MAC和Linux的区别,参考网址:

    http://blog.csdn.net/cbbbc/article/details/50474947

    错误解决

    sed command hits “undefined label” error on Mac OS X

    http://www.mkyong.com/mac/sed-command-hits-undefined-label-error-on-mac-os-x/

    接下来言归正传,步入正题:

    原数据


    可以用vi或者vim创建一个test.txt的文本,

    dongzhengdeMacBook-Pro:temp dongzheng$ vim test.txt

    文本内容如下:

    dongzhengdeMacBook-Pro:temp dongzheng$ cat test.txt 
    aaaa
    bbbb
    cccc
    dddd

    占位符

    在匹配行的前一行或者后一行添加内容


    写法:

    #匹配行前加
    sed -i '/dzblog/inickname' file
    #匹配行前后
    sed -i '/dzblog/athis is my blog address' file

    书写时为了方便区分,往往会在i或者a的后面加一个反斜杠。代码就变成:

    #匹配行前加
    sed -i '/dzblog/i
    ickname' file
    #匹配行前后
    sed -i '/dzblog/a	his is my blog address' file

    想记住也很简单,a就记忆成after就可以了。

    例子:

    在第二行即"bbbb"行的下面添加一行,内容为"delon"

    Linux命令:

    sed '/bbbb/adelon' test.txt 

    如果此命令在MAC下输入,会报错:

    sed: 1: "/bbbb/adelon": extra characters after at the end of a command

    占位符 

    MAC命令:

    ➜  Home sed '/aaaa/a
    delon
    ' test.txt

    结果:

    aaaa
    bbbb
    delon
    cccc
    dddd

    在某行的前面添加,只需要把'a'换成'i'即可。

    此命令不会在原文件上进行更改,只是会把结果输出到termimal里,如果需要直接更改文件,需要参数 -i

    直接替换文件里的指定文本


    主要介绍-i和替换文本的方式

    Linux命令

    #直接将file文件里的printa替换为printb
    sed -i 's/printa/printb/' test.txt

    MAC上的命令当然略有不同,报错为:

    sed: 1: "test.txt": undefined label 'est.txt'

    MAC命令:

    #mac的使用方式sed -ixxx 's/被替换文本/替换文本/' test.txt
    sed -i.bak 's/printa/printb/' test.txt

     -i后面跟字母数字均可,比如说我写的-i.bak,这样的话,会在file的同级目录下,出现一个test.txt.bak的文件,这个文件备份的是文件修改前的内容。

    我想mac的设计初衷或许是为了防止sed改错的悲剧,所以必须强制备份。

    复制过来,未验证

    Linux shell脚本 删除文件中的一行内容

    比如:在1.txt里有以下内容:

    HELLO=1

    NI=2

    WORLD=3

    I Love China.

    Love all....

    如果是要删除第三行:

    sed -i '3d' 1.txt

    如果删除以Love开头的行

    sed -i '/^Love/d' 1.txt

    删除包含Love的行

    sed -i '/Love/d' 1.txt

      

    参考

    http://www.360doc.com/content/14/1125/19/7044580_428024359.shtml

    SHELL 在指定行的前/后插入指定内容

    linux下在某行的前一行或后一行添加内容

    Mac上的sed

    有空就学习如下几个命令:

    https://zhidao.baidu.com/question/508817260.html?qbl=relate_question_0&word=shell%20%C8%A1%CE%C4%BC%FE%CC%D8%B6%A8%D0%D0%20%CC%ED%BC%D3

  • 相关阅读:
    韦德螺旋: 这真是一个螺旋吗?
    山上你能看到什么动物?
    你能够30秒内一字不差的念完它吗? 注意, 是读“颜色”, 不是让你识字.
    路透斯沃德的不可能的三角形
    换个角度, 青蛙也许就是白马王子
    这是一张很有趣的图片, 通常女性会先看到月亮, 男性会先看到人脸. 如果相反, 表示你体内的异性荷尔蒙偏高哦!
    亲吻的情侣幻觉: 这幅虚幻的亲吻由美国艺术家杰里•唐恩创作.
    PostgreSQL的 initdb 源代码分析之七
    PostgreSQL的initdb 源代码分析之六
    PostgreSQL的initdb 源代码分析之五
  • 原文地址:https://www.cnblogs.com/dzblog/p/6278546.html
Copyright © 2020-2023  润新知