sed简称流编辑器,即stream editor的缩写。sed是一个操作、过滤和转换文本内容的强大工具。常用的功能有通过结合正则表达式对文件实现快速的增删改查。最常用的查询功能是过滤(过滤指定字符串)、取行(取出指定行)。

    linux三剑客之sed - 图1

    1、sed常用语法如下:

    1. sed [选项参数] [sed内置命令字符] 文件

    1)sed常用参数选项如下:

    1. -n:表示取消默认的sed输出,通常与sed内置命令p一起使用;
    2. -i:表示直接将修改结果写入文件,如果不加-ised修改的是内存数据;
    3. -e:表示多次编辑,不需要管道符号;
    4. -r:表示支持正则表达式;

    2)sed内置的命令字符,主要是用于对文件进行增删改查等操作,常见内置命令字符有:

    1. a:表示对文本进行追加操作,在指定行后面添加一行或多行文本;
    2. d:表示删除匹配行;
    3. i:表示插入文本,在指定行前添加一行或多行文本;
    4. p:表示打印匹配行内容,通常与-n一同使用;
    5. s/正则/替换内容/g:表示匹配正则内容,然后替换内容(支持正则表达式),结尾g表示全局匹配;

    3)sed匹配范围主要有:

    1. 空地址:表示全文处理;
    2. 单地址:表示指定文件某一行;
    3. /pattern/:表示被模式匹配到的每一行;
    4. 范围区间:如12,22表示十二行到二十二行,如12,+5表示第12行向下5行;
    5. 步长:如1~2,表示1,3,5,7,9行;2~2,表示2,4,68,10行;

    2、以下通过实际例子来练习,加深大家对sed命令的用法。

    准备一个haotest01.txt文件,文件内容如下:

    linux三剑客之sed - 图2

    1)通过sed命令输出1行向下4行的数据,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "1,+4p" -n haotest01.txt He is a good BOY.she is a girl !I have a dream.We will study linux.we will study Python.

    2)通过sed命令输出文件中的4到6行数据,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "4,6p" -n haotest01.txt We will study linux.we will study Python.So we will go study together.

    3)通过sed命令输出有study字符串的行,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "/study/p" -n haotest01.txt We will study linux.we will study Python.So we will go study together.

    4)通过sed命令将文件中的good修改替换为bad,并且输出,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "s/good/bad/g" haotest01.txt
    2. He is a bad BOY.
    3. she is a girl !
    4. I have a dream.
    5. We will study linux.
    6. we will study Python.
    7. So we will go study together.
    8. [root@haodaolinux1 ~]# cat haotest01.txt
    9. He is a good BOY.
    10. she is a girl !
    11. I have a dream.
    12. We will study linux.
    13. we will study Python.
    14. So we will go study together.

    此时发现只是修改输出,原文件并没有实际替换成功,这是因为sed只是修改替换内存中的数据,要加上-i才能修改原文件内容,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "s/good/bad/g" -i haotest01.txt
    2. [root@haodaolinux1 ~]# cat haotest01.txt
    3. He is a bad BOY.
    4. she is a girl !
    5. I have a dream.
    6. We will study linux.
    7. we will study Python.
    8. So we will go study together.
    9. [root@haodaolinux1 ~]#

    如果需要在一行中多次编辑替换多个地方的数据,则要在每个sed编辑语句前加带-e选项参数。

    5)通过sed命令在文件的第3行下追加一行数据,内容为:we he he,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "3a we he he" -i haotest01.txt

    替换后原文件内容如下图所示:

    linux三剑客之sed - 图3

    这里是通过内置命令符a在指定行下面追加,如果需要在指定行上面加,则要内置命令符i

    如果需要在指定行下追加多行数据,可以在数据中需要换行的地方添加换行符号\n

    6)sed匹配范围空地址的使用,即通过sed命令,在每一行的下面追加5个*,命令如下所示:

    1. [root@haodaolinux1 ~]# sed "a *****" -i haotest01.txt

    追加后内容如下图所示:

    linux三剑客之sed - 图4

    以上针对sed命令日常工作中常常见到的一些招式,当然还有一些其它的招式,大家可以手动去练习,毕竟自己去学到了才是你真正的知识,愿大家每一天都能够进步一点点。