美文网首页程序员利器
SED 命令笔记 — 内容修改

SED 命令笔记 — 内容修改

作者: jimson_ma | 来源:发表于2020-03-09 23:39 被阅读0次

    对于sed 命令,大家熟知的都是使用s来修改内容。但是除了s, sed还提供了其他的方式来修改内容:
    a 追加内容
    i 插入内容
    d 删除内容
    c 替换内容
    l 显示内容
    p 打印内容

    我们一起来看一下(作者使用的是mac 自带的FreeBSD sed, 所以以下语法以FreeBSD为准),其实用法大致相同。


    追加内容(a,i):

    seq 3 | sed 'a\
                 hello'
    
    1
    hello2
    hello3
    hello⏎
    

    每一行后面都加了\nhelloa前面也可指定行数,比如2a表示在第二行后面追加。$则表示最后一行。

    seq 3 | sed '$a\
                 hello'
    
    1
    2
    3
    hello⏎
    

    ia的区别在于添加内容的位置,i添加在行的前面, a添加在行的后面。


    c,d,l,p:

    c,d,l,p 表示整行内容被修改(Change), 删除(Delete), 列出(List) 和打印(Print). 前面可以加行号,不加行号则表示应用在每一行。

    seq 3 | sed '$c\
                 hello'
    
    1
    2
    hello⏎
    

    也可以用m,n表示一个区间,例1,3c 表示替换从第一行到第三行,也就说说包括第一行,第二行和第三行的所有内容整体被修改为指定的一个值。这里与顺序有关,这里如果m < n 则表示从m行到n行, 如果m >= n,则只表示第m行。

    seq 5 | sed '2,4c\
                 hello'
    
    1
    hello5
    

    2,4表示第2行到第4行整体被替换为hello.

    seq 5 | sed '4,2d'
    
    1
    2
    3
    5
    

    4,2表示只有第4行被删除。
    因为d,l,p无需新增内容,所以后面不需要任何参数。 d 也可以使用D.
    l,p的区别在于l会对输出行加上$, p则不会。 命令行中一般与 -n 搭配使用。

    seq 5 | sed -n '1,2l'
    
    1$
    2$
    
    seq 5 | sed -n '1,2p'
    
    1
    2
    

    再看s的其他用法:

    • 使用一个字符串表示包含该字符串的行
    cat input.txt 
    # world world
    # hello world
    cat input.txt | sed '/hello/s/world/T/'
    # world world
    # hello T
    

    只有有hello的一行中的world 被修改为T

    • 也可以使用n;匹配间隔几行:
    seq 10 | sed 'n;n;n;s/./test/'
    # 1
    # 2
    # 3
    # test
    # 5
    # 6
    # 7
    # test
    # 9
    # 10
    

    三个n;表示间隔3行。

    • 当选择的部分或者替换的部分出现特殊字符与命令中的字符冲突时,可以修改命令中的字符为其他不冲突的命令使用。 以下命令效果一样。
    echo "/home/example"| sed 's#/home/example#/usr/local/example#'
    # /usr/local/example
    echo "/home/example"| sed 's!/home/example!/usr/local/example!'
    # /usr/local/example
    

    相关文章

      网友评论

        本文标题:SED 命令笔记 — 内容修改

        本文链接:https://www.haomeiwen.com/subject/kptvdhtx.html