linux三剑客之sed命令详解

简介
linux中的sed命令是Linux三剑客之一,它是stream editor流式编辑器的简称,可以定位到匹配的数据,并可以对数据进行增删改查等编辑操作,是功能强大的文本文件、日志、配置文件的处理工具。
sed命令与SQL进行类比,相当于SQL的update table set filed=new where filed=old。sed命令专注于对数据的修改。

命令语法格式
sed [OPTIONS] ‘command’ [file…]
sed [OPTIONS] [-e command] [-f command_file] [-i extension ] [file…]

sed命令的工作流程:
1)从输入中读取一行
2)在读入的行执行sed命令
3)把结果显示在输出中
4)读取下一行,重复1~3步骤,直到到达文件末尾;
⚠️sed命令默认显示修改后的内容,不修改原文件,除非使用了写入命令-i。

参数说明

  • -e command 或 --expression=command以指定的command命令来处理输入的文本文件

  • -f command_file 或 --file=command_file 以指定的command命令文件来处理输入的文本文件
    -e和-f可以指定多个命令来处理文本。

  • -E 表示支持扩展正则表达式,与grep命令一致

  • -n 或 --quiet 或 – silent 取消默认控制台输出

  • -i 将命令执行的结果更改到文件中,即修改原文件

sed命令command说明

可以将’command’(注意这部分的命令要用’ '单引号括住)部分理解为sed处理文件时的动作,sed命令时默认输出的,即将文本处理的结果输出在终端上。

  • a\ 新增或追加,a的后面可以接字符串,并且是追加到本行的下一行,示例如下:
    linux三剑客之sed命令详解
    红色划线部分的命令看起来好奇怪,一定要输入一个真实的换行才将新的字符串写入到下一行,并且,新的字符串也需要输入一个真实的换行才是将新的字符串作为一个独立的行,否则,只是在下一行的前面添加新字符串,如蓝色划线部分所示,若要换行,如下示例所示:
    linux三剑客之sed命令详解
    这种操作好麻烦。。。。

  • i\ 插入 和a\的作用相似,只不过字符会在当前行的上一行出现,示例如下:
    linux三剑客之sed命令详解
    这里的问题和a\动作的问题一样,在编写命令的时候需要手动输入回车键。一种解决方法是将command命令写入.sed文件中(写命令行的时候精简点????),然后使用 -f来调用命令文件。示例如下:
    linux三剑客之sed命令详解

  • d 删除
    删除文本文件中的2~3行,示例如下:
    linux三剑客之sed命令详解
    这里的数字代表行号,$表示最后一行。

  • p 打印行,即以行为单位进行显示,通常与-n选项一起使用显示指定的行
    示例如下:
    linux三剑客之sed命令详解
    若没有使用-n选项,把原始文件显示,指定的行会多显示一次。
    1)sed -n ‘/string/p’ file 表示输出含有字符串string的行
    linux三剑客之sed命令详解
    2)sed -n ‘/string1/,/string2/p’ 表示输出字符string1到string2的所有行
    linux三剑客之sed命令详解

  • s 用一个字符串替换另一个
    linux三剑客之sed命令详解
    s后面可以跟任意符号,比如/ 或# 都表示分隔符,功能是用后面的内容替换前面的内容。
    command末尾加g,表明进行全局替换,即文本中所有匹配到的字符都进行替换
    linux三剑客之sed命令详解
    也可以指定行进行替换,示例如下:
    linux三剑客之sed命令详解
    &符号在sed命令中代表上次匹配的结果,示例如下:
    linux三剑客之sed命令详解

  • g
    获得内存缓冲区的内容,并替代当前模板块中的文本,上面也使用了g
    所有行都被替换成了空行:
    linux三剑客之sed命令详解

  • G
    获得内存缓冲区的内容,并追加当前模板块中的文本在
    每行的后面追加一个空行,示例如下:
    linux三剑客之sed命令详解

  • n
    读取下一个输入行,用下一个命令处理新的行而不是用第一个命令
    linux三剑客之sed命令详解
    上述命令是输出偶数行,即每次读取当前行的下一行并进行输出,过程:当读取第一行1时,输出第二行2,同时跳转到第三行,然后输出第三行的下一行即4,直到处理完成。

本文只列举了一些常用的内容,更多详细信息请查阅sed文档