• Linux三剑客之sed的基本用法介绍


    【介绍】

    sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法。

       

    【常用选项】

    -e

    下一个参数为一个sed指令,一般只会用于同一行有多个sed的时候

    -f

    后面跟保存了sed指令的文件

    -i

    直接对内容进行修改,不加i时只是预览,并不做实际改动

    -n

    取消默认输出,只输出处理过的行。

       

    【编辑命令】

    a

    追加·向匹配行后面插入内容

    c

    更改·更改匹配行的内容

    i

    插入·向匹配行前插入内容

    d

    删除·删除匹配的内容

    s

    替换·替换匹配到的内容

    p

    打印·打印匹配到的内容

    =

    打印匹配到的行号

    n

    读取下一行

    r,w

    读和写编辑

       

    【命令实例】

    ·插入行

    sed '3ahello' test.txt

    在第三行后插入"hello"(新行)

    sed '/123/ahello' test.txt

    在内容"123"后插入"hello"(新行,每一个匹配后都添加)

    sed '$ahello' test.txt

    在文件最后一行后添加"hello"

    sed '3ihello' test.txt

    在第三行前插入"hello"(新行)<其他同上>

       

    ·更改行

    sed '1chello' test.txt

    将文件第一行替换为hello

    sed '/123/chello' test.txt

    将文件包含123的行替换为hello

    sed '$chello' test.txt

    将文件最后一行替换为hello

       

    ·删除行

    sed '4d' test.txt

    删除文件第四行

    sed '1~2d' test.txt

    从第一行开始,每两行删除一行(删除奇数行)

    sed '1,2d' test.txt

    删除1,2

    sed '1,2!d' test.txt

    删除1,2之外所有的行

    sed '$d' test.txt

    删除最后一行

    sed '/123/d' test.txt

    删除匹配123的行

    sed '/123/,$d' test.txt

    删除匹配123的行以及后面所有行

    sed '/123/,+1d' test.txt

    删除匹配123的行以及后面一行

    sed '/^$/d' test.txt

    删除空行

    sed '/123|abc/!d' test.txt

    删除不匹配123abc的行(!表示取反)

    sed '1,3{/123/d}' test.txt

    删除1~3行中,匹配123的行

       

    ·替换内容

    sed 's/123/abc/' test.txt

    将文件中的第一个123替换为abc

    sed 's/123/abc/g' test.txt

    将文件中所有的123替换为abc

    sed 's/123/abc/2' test.txt

    将每行第二个123替换为abc

    sed -n 's/123/abc/gpw test2.txt' test.txt

    将每行中所有的123都替换为abc,并将替换后的内容写到test2.txt

    sed '/#/s/,.*//g' test.txt

    匹配所有有#的行,将','以及','以后的内容替换为空

    sed 's/..$//g' test.txt

    将每一行的最后两个字符替换为空,每一个'.'代表一个字符

    sed 's/^#.*//' test.txt

    将每一条以#开头的行都替换为空行

    sed 's/^#.*//;/^$/d' test.txt

    将每一条以#开头的行都去掉(去除注释行,分号做二次操作)

    sed 's/^[0-9]/(&)/' test.txt 或者
    sed 's/(^[0-9])/(1)/' test.txt

    将每一行行首的数字加括号(&代表匹配到的内容)
    左侧特殊字符需要转义,右侧不需要(1代表匹配到的内容)

    sed 's/$/&abc/' test.txt

    在每一行后面添加abc字段

       

    ·打印文件中的行

    sed -n '3p' test.txt

    打印文件中的第三行内容

    sed -n '2~3p' test.txt

    从第二行开始,每三行打印一行

    sed -n '$p' test.txt

    打印文件最后一行

    sed -n '1,3p' test.txt

    打印一到三行

    sed -n '3,$p' test.txt

    打印第三行到最后一行

    sed -n '/abc/p' test.txt

    逐行读取,打印包含abc的行

    sed -n '/abc/,3p' test.txt

    逐行读取,打印第一次匹配abc的行一直到第三行,并将之后匹配abc的行也打印

    sed -n '2,/abc/p' test.txt

    打印第二行到匹配abc的行

    sed -n '/abc/,$p' test.txt

    打印匹配abc的行到最后一行

    sed -n '/abc/,+1p' test.txt

    打印匹配abc的行及其后一行

    sed -n '/abc/,/123/p' test.txt

    打印从匹配abc的行一直到匹配123的行

       

    ·打印文件的行号

    sed -n '$=' test.txt

    打印文件最后一行的行号(同wc -l

    sed -n '/error/=' test.txt

    打印匹配error的行号

    sed -n '/error/{=;p}' test.txt

    打印匹配error的行的行号以及内容

       

    ·从文件中读取内容

    sed 'r test2.txt' test1.txt

    会在test1.txt文件的每一行后都追加test2.txt的内容

    sed '3r test2.txt' test1.txt

    test1.txt文件的第三行后追加test2.txt的内容

    sed '/123/r test2.txt' test1.txt

    test1.txt文件中匹配123的行后追加test2.txt的内容

    sed '$r test2.txt' test1.txt

    test1.txt文件的最后一行插入test2.txt的内容

       

    ·向文件中写

    sed -n 'w test2.txt' test1.txt

    test1.txt文件的内容写到test2.txt文件中(如果没有会创建)

    sed -n '2w test2.txt' test1.txt

    test1.txt文件中的第二行内容写入到test2.txt文件中

    sed -n -e '1w test2.txt' -e '$w test2.txt' test1.txt

    test1.txt文件的第一行和最后一行写入到test2.txt文件中

    sed -n -e '1w test2.txt' -e '$w test3.txt' test1.txt

    test1.txt文件中的第一行写入到test2文件中;
    最后一行写入到test3.txt文件中

    sed -n '/abc|123/w test2.txt' test1.txt

    test1.txt文件重匹配abc或者123的行,写入到test2文件中

    sed -n '/123/,$w test2.txt' test1.txt

    test1文件中匹配123的行一直到最后一行,写入到test2文件中

    sed -n '/123/,+2w test2.txt' test1.txt

    test1文件中匹配123的行和之后两行,写入到test2文件中

     

  • 相关阅读:
    设计模式:备忘录模式??
    jQuery总结
    MYSQL(三)
    MYSQL(二)
    MYSQL(一)
    Web.xml配置详解
    Spring-JDBC通用Dao
    网络七层协议的形象说明
    网络编程概念
    JSP 9 大内置对象详解
  • 原文地址:https://www.cnblogs.com/liufarui/p/12146599.html
Copyright © 2020-2023  润新知