Linux sed 命令图文详解

sed 是一个流编辑器(stream editor),主要用来执行文本替换。但 sed 的主要设计目的是以批处理的方式而不是交互的方式来编辑文件。

命令简介

基本命令格式

sed [常用选项] 命令文本 输入

常用选项

    -n (--quiet, --silent):安静模式。在 sed 的基本用法中,所有来自标准输出的信息都会被列出到终端上。加上 -n 参数后,则只有被sed 处理的那些行才会被输出。
    -e:指定在指令列模式上执行的命令文本。默认不需要指定,只有同时要执行多个命令文本时才需要显式的指定 -e 选项。
    -f:同时要执行多个命令文本时,可以将这些命令文本写到一个文件中,然后通过 -f filename 的方式使用。
    -r:sed 默认使用基础正则表达式语法(BRE),指定 -r 选项后使用扩展正则表达式语法(ERE)。
    -i:直接修改读取的文档,而不是输出到终端。

常用命令

    a:新增行, a 的后面接字串,这些字串会被添加到匹配行的下面。
    c:替换行, c 的后面接字串,这些字串会替换掉匹配到的行。
    d:删除行,删除匹配到的行。
    i:插入行, i 的后面接字串,这些字串会被插入到匹配行的上面。
    p:打印,将某些行输出。通常 p 会与参数  -n 一起使用,这样只输出匹配到的行。
    s:字符串替换,主要搭配正则表达式使用。

解释一下本文中 "命令" 与 "命令文本" 的区别:
命令是一些抽象的操作,比如 a 指示新增行,d 指示删除行。
命令文本则是由命令和其它一些信息组合起来的一个字符串,用来执行具体的操作。
比如在第一行下面添加一行,内容为 'Hello world',命令文本为:'1a Hello world'
再如删除包含字符串 'Hello world' 的行,命令文本为:'/Hello world/d'

常用选项及命令详解

说明:本文示例中 demo 文件 test.txt 包含三行文字,内容为:

aa bb cc

demo 文件 hello.txt 包含三行文字,内容为:

Hello world! Hello Jack! Hello China! Hello Nick!

删除行

删除行需要使用命令 d:

$ sed '1d' test.txt # 删除第一行 $ sed '$d' test.txt # 删除最后一行 $ sed '1,2d' test.txt # 删除第一行到第二行 $ sed '2,$d' test.txt # 删除第二行到最后一行

注意,执行完上面的命令,我们只能在命令行终端上看到正确的结果,而 test.txt 文件根本没有发生变化:

Linux sed 命令图文详解

选项 -i

如果想要直接在原文件上进行修改(其实是先修改文件的内容,然后保存到原文件中),需要使用选项 -i:

$ sed -i '1d' test.txt

Linux sed 命令图文详解

注意,应用 -i 选项后命令行上没有输出内容,但是源文件被更新了。

新增行

a 命令可以在匹配的行下面新增行:

$ sed '1a Hello world!' test.txt # 在第一行下面新增一行,内容为 "Hello world!" $ sed '$a Hello world!' test.txt # 在最后一行下面新增一行,内容为 "Hello world!" $ sed '1,3a Hello world!' test.txt # 在第一行,第二行和第三行下面分别增加一行,内容 # 为 "Hello world!" 1,3 表示从第一行到第三行 $ sed '1a Hello world!\nHello China!' test.txt # 一次增加多行需要使用换行符 \n

Linux sed 命令图文详解

选项 -e

-e 选项用来指定命令文本,如果只有一个命令文本时 -e 选项可以省略。如何要指定多个命令文本就需要使用 -e 选项。

$ sed -e '1a xxx' -e '2a yyy' test.txt

插入行

i 命令可以在匹配的行上面插入行,语法与新增行相同,只是新行在指定行的上面(与 a 命令的区别):

选项 -f

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15432.html