命令图像和文字详解

总结

sed
是一个强有力的文本替换工具,尤其是需要在自动化的场景中使用的时候。本文结合实例比较详细的介绍了
sed 的使用方法,希望对大家了解、使用 sed 有所帮助。

图片 1

新增行

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

图片 2

选项 -e

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

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

常用选项及命令详解

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

aa
bb
cc

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

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

字符串替换

与行替换不同,s
命令只替换匹配到的内容(一般为字符串):

$ sed 's/Hello/Hi/' hello.txt             # 把Hello 替换为 Hi

图片 3

上图带给我们的困惑之一是:为什么第一行中只有第一个
Hello 被替换了?答案是 sed
默认只会替换第一个匹配到的内容!那么我们的第二个困惑来了:如果只替换第一个匹配到的内容,那么为什么第二行和第三行的
Hello 都被替换了呢?这个问题涉及的 sed 的工作方式,sed
是一个以行为单位进行文本处理的工具!所以图中的三行是被分为三次,每次一行进行处理的。因而第二行和第三行中的
Hello 对于本行来说都是第一个匹配到的内容,被替换是正确的。
要进行全局替换,需要在命令文本中指定
g,试试下面的命令:

$ sed 's/Hello/Hi/g' hello.txt             # 把匹配到的所有Hello 都替换为 Hi

图片 4

这下第一行中的两个
Hello 都被替换了。

我们还可以限制执行替换操作的行:

$ sed '2,3s/Hello/Hi/g' hello.txt          # 只在第二行和第三行进行替换操作

当然也可以通过替换来删除不需要的字符串:

$ sed 's/Hello//g' hello.txt               # 删除字符串 Hello

定界符

虽然 /
是最常用的定界符,但是你也可以使用其它的字符。举个简单的例子,当你要在
linux 下进行路径替换时,使用 /
作为定界符是很不爽的(需要很多的转义符),此时换一个定界符是最好的解决方案:

图片 5

上图中我们使用分号作为定界符轻松实现了路径替换。

匹配

细心的同学可能已经注意到了,sed
所有的操作都是建立在行定位之上的。也就是说无论你要干什么,都要先找到(匹配)目标行。连最简单的删除行
‘1d’,也得先定位到第一行,然后才能删除。所以唯一能限制我们发挥 sed
能力的因素就是:如何匹配到期望的行?

答案是掌握基本的规则,然后多练习! -n 选项和 p
命令是我们练习的好帮手。-n 选项告诉 sed 只输出那些被处理过的行。比如 sed
‘1a Hello world!’ test.txt 命令默认会输出四行,应用 -n 后只输出一行:

图片 6

p 命令则告诉 sed 只输出那些匹配到的行, 比如命令:

$ sed -n '1p' test.txt 和命令sed -n '2,3s/Hello/Hi/gp' hello.txt

图片 7

行匹配的规则大概有两类:通过行号进行匹配和通过正则表达式进行匹配。

下面是一些通过行号进行匹配的例子:

$ sed -n '1p' test.txt                 # 匹配第一行
$ sed -n '$p' test.txt                 # 匹配最后一行
$ sed -n '2,3p' test.txt               # 匹配第二行和第三行
$ sed -n '3,$p' test.txt               # 匹配第三行和第三行后的每一行

下面是通过正则表达式进行匹配的例子:

$ sed -n '/Hello/p' hello.txt

默认的匹配是区分大小写的,要忽略大小写可以使用I(大写字母i)

$ sed -n '/hello/Ip' hello.txt

下面几个是正则表达式匹配后执行操作的例子:

$ sed '/Hello/d' hello.txt                # 找到匹配的行,并删除
$ sed '/Hello/a world!' hello.txt         # 找到匹配的行,并在它们下面添加新行
$ sed '/Hello/s/world/China/g' hello.txt  # 找到匹配的行,在这些行中执行替换

字符串替换

与行替换不同,s
命令只替换匹配到的内容(一般为字符串):

$ sed 's/Hello/Hi/' hello.txt             # 把Hello 替换为 Hi

图片 8

上图带给我们的困惑之一是:为什么第一行中只有第一个
Hello 被替换了?答案是 sed
默认只会替换第一个匹配到的内容!那么我们的第二个困惑来了:如果只替换第一个匹配到的内容,那么为什么第二行和第三行的
Hello 都被替换了呢?这个问题涉及的 sed 的工作方式,sed
是一个以行为单位进行文本处理的工具!所以图中的三行是被分为三次,每次一行进行处理的。因而第二行和第三行中的
Hello 对于本行来说都是第一个匹配到的内容,被替换是正确的。
要进行全局替换,需要在命令文本中指定
g,试试下面的命令:

$ sed 's/Hello/Hi/g' hello.txt             # 把匹配到的所有Hello 都替换为 Hi

图片 9

这下第一行中的两个
Hello 都被替换了。

我们还可以限制执行替换操作的行:

$ sed '2,3s/Hello/Hi/g' hello.txt          # 只在第二行和第三行进行替换操作

当然也可以通过替换来删除不需要的字符串:

$ sed 's/Hello//g' hello.txt               # 删除字符串 Hello

定界符

虽然 /
是最常用的定界符,但是你也可以使用其它的字符。举个简单的例子,当你要在
linux 下进行路径替换时,使用 /
作为定界符是很不爽的(需要很多的转义符),此时换一个定界符是最好的解决方案:

图片 10

上图中我们使用分号作为定界符轻松实现了路径替换。

删除行

删除行需要使用命令
d:

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

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

图片 11

选项 -i

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

$ sed -i '1d' test.txt

图片 12

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

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

插入行

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

图片 13

选项
-f

前面我们通过选项
-e 添加了多个命令文本,但是如果需要添加比较多的命令文本,使用选项 -e
就不太合适了。因为把所有的命令文本全部写在命令行中会导致维护困难。此时选项
-f 就派上用场了。我们可以把多个命令文本写入到文本文件中,然后通过 -f
选项进行引用。
我们创建一个叫
commands 的文件,在里面添加三个命令文本如下:

1i Hello world!
2i Hello world!
3i Hello world!

然后执行命令:

$ sed -f commands test.txt

图片 14

通过 -f
选项,commands 文件中的三个命令文本都被执行了!

新增行

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

图片 15

选项
-e

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

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

替换行

使用 c 命令可以轻松的进行整行替换:

$ sed '1c  Hello world!' test.txt         # 把第一行替换为 "Hello world!"
$ sed '1,3c Hello world!' test.txt        # 把第一行到第三行替换为 "Hello world!"

图片 16

注意,上图中的命令把三行文本替换成了一行文本!

替换行

使用 c
命令可以轻松的进行整行替换:

$ sed '1c  Hello world!' test.txt         # 把第一行替换为 "Hello world!"
$ sed '1,3c Hello world!' test.txt        # 把第一行到第三行替换为 "Hello world!"

图片 16

注意,上图中的命令把三行文本替换成了一行文本!

常用选项及命令详解

说明:本文示例中
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 文件根本没有发生变化:

图片 18

选项 -i

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

$ sed -i '1d' test.txt

图片 19

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

命令简介

基本命令格式

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’

插入行

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

图片 20

选项
-f

前面我们通过选项
-e 添加了多个命令文本,但是如果需要添加比较多的命令文本,使用选项 -e
就不太合适了。因为把所有的命令文本全部写在命令行中会导致维护困难。此时选项
-f 就派上用场了。我们可以把多个命令文本写入到文本文件中,然后通过 -f
选项进行引用。
我们创建一个叫
commands 的文件,在里面添加三个命令文本如下:

1i Hello world!
2i Hello world!
3i Hello world!

然后执行命令:

$ sed -f commands test.txt

图片 21

通过 -f
选项,commands 文件中的三个命令文本都被执行了!

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

删除行

删除行需要使用命令
d:

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

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

图片 18

选项 -i

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

$ sed -i '1d' test.txt

图片 19

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

替换行

使用 c
命令可以轻松的进行整行替换:

$ sed '1c  Hello world!' test.txt         # 把第一行替换为 "Hello world!"
$ sed '1,3c Hello world!' test.txt        # 把第一行到第三行替换为 "Hello world!"

图片 24

注意,上图中的命令把三行文本替换成了一行文本!

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

匹配

细心的同学可能已经注意到了,sed
所有的操作都是建立在行定位之上的。也就是说无论你要干什么,都要先找到(匹配)目标行。连最简单的删除行
‘1d’,也得先定位到第一行,然后才能删除。所以唯一能限制我们发挥 sed
能力的因素就是:如何匹配到期望的行?

答案是掌握基本的规则,然后多练习!
-n 选项和 p 命令是我们练习的好帮手。-n 选项告诉 sed
只输出那些被处理过的行。比如 sed ‘1a Hello world!’ test.txt
命令默认会输出四行,应用 -n 后只输出一行:

图片 6

p 命令则告诉
sed 只输出那些匹配到的行, 比如命令:

$ sed -n '1p' test.txt 和命令sed -n '2,3s/Hello/Hi/gp' hello.txt

图片 7

行匹配的规则大概有两类:通过行号进行匹配和通过正则表达式进行匹配。

下面是一些通过行号进行匹配的例子:

$ sed -n '1p' test.txt                 # 匹配第一行
$ sed -n '$p' test.txt                 # 匹配最后一行
$ sed -n '2,3p' test.txt               # 匹配第二行和第三行
$ sed -n '3,$p' test.txt               # 匹配第三行和第三行后的每一行

下面是通过正则表达式进行匹配的例子:

$ sed -n '/Hello/p' hello.txt

默认的匹配是区分大小写的,要忽略大小写可以使用I(大写字母i)

$ sed -n '/hello/Ip' hello.txt

下面几个是正则表达式匹配后执行操作的例子:

$ sed '/Hello/d' hello.txt                # 找到匹配的行,并删除
$ sed '/Hello/a world!' hello.txt         # 找到匹配的行,并在它们下面添加新行
$ sed '/Hello/s/world/China/g' hello.txt  # 找到匹配的行,在这些行中执行替换

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

常用选项及命令详解

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

aa
bb
cc

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

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

新增行

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

图片 2

选项
-e

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

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

匹配

细心的同学可能已经注意到了,sed
所有的操作都是建立在行定位之上的。也就是说无论你要干什么,都要先找到(匹配)目标行。连最简单的删除行
‘1d’,也得先定位到第一行,然后才能删除。所以唯一能限制我们发挥 sed
能力的因素就是:如何匹配到期望的行?

答案是掌握基本的规则,然后多练习!
-n 选项和 p 命令是我们练习的好帮手。-n 选项告诉 sed
只输出那些被处理过的行。比如 sed ‘1a Hello world!’ test.txt
命令默认会输出四行,应用 -n 后只输出一行:

图片 28

p
命令则告诉 sed 只输出那些匹配到的行, 比如命令:

$ sed -n '1p' test.txt 和命令sed -n '2,3s/Hello/Hi/gp' hello.txt

图片 29

行匹配的规则大概有两类:通过行号进行匹配和通过正则表达式进行匹配。

下面是一些通过行号进行匹配的例子:

$ sed -n '1p' test.txt                 # 匹配第一行
$ sed -n '$p' test.txt                 # 匹配最后一行
$ sed -n '2,3p' test.txt               # 匹配第二行和第三行
$ sed -n '3,$p' test.txt               # 匹配第三行和第三行后的每一行

下面是通过正则表达式进行匹配的例子:

$ sed -n '/Hello/p' hello.txt

默认的匹配是区分大小写的,要忽略大小写可以使用I(大写字母i)

$ sed -n '/hello/Ip' hello.txt

下面几个是正则表达式匹配后执行操作的例子:

$ sed '/Hello/d' hello.txt                # 找到匹配的行,并删除
$ sed '/Hello/a world!' hello.txt         # 找到匹配的行,并在它们下面添加新行
$ sed '/Hello/s/world/China/g' hello.txt  # 找到匹配的行,在这些行中执行替换

字符串替换

与行替换不同,s 命令只替换匹配到的内容(一般为字符串):

$ sed 's/Hello/Hi/' hello.txt             # 把Hello 替换为 Hi

图片 8

上图带给我们的困惑之一是:为什么第一行中只有第一个 Hello
被替换了?答案是 sed
默认只会替换第一个匹配到的内容!那么我们的第二个困惑来了:如果只替换第一个匹配到的内容,那么为什么第二行和第三行的
Hello 都被替换了呢?这个问题涉及的 sed 的工作方式,sed
是一个以行为单位进行文本处理的工具!所以图中的三行是被分为三次,每次一行进行处理的。因而第二行和第三行中的
Hello 对于本行来说都是第一个匹配到的内容,被替换是正确的。
要进行全局替换,需要在命令文本中指定 g,试试下面的命令:

$ sed 's/Hello/Hi/g' hello.txt             # 把匹配到的所有Hello 都替换为 Hi

图片 9

这下第一行中的两个 Hello 都被替换了。

我们还可以限制执行替换操作的行:

$ sed '2,3s/Hello/Hi/g' hello.txt          # 只在第二行和第三行进行替换操作

当然也可以通过替换来删除不需要的字符串:

$ sed 's/Hello//g' hello.txt               # 删除字符串 Hello

定界符

虽然 /
是最常用的定界符,但是你也可以使用其它的字符。举个简单的例子,当你要在
linux 下进行路径替换时,使用 /
作为定界符是很不爽的(需要很多的转义符),此时换一个定界符是最好的解决方案:

图片 10

上图中我们使用分号作为定界符轻松实现了路径替换。

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’

常用命令

总结

sed
是一个强有力的文本替换工具,尤其是需要在自动化的场景中使用的时候。本文结合实例比较详细的介绍了
sed 的使用方法,希望对大家了解、使用 sed 有所帮助。

原文地址:

插入行

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

图片 13

选项 -f

前面我们通过选项 -e
添加了多个命令文本,但是如果需要添加比较多的命令文本,使用选项 -e
就不太合适了。因为把所有的命令文本全部写在命令行中会导致维护困难。此时选项
-f 就派上用场了。我们可以把多个命令文本写入到文本文件中,然后通过 -f
选项进行引用。
我们创建一个叫 commands 的文件,在里面添加三个命令文本如下:

1i Hello world!
2i Hello world!
3i Hello world!

然后执行命令:

$ sed -f commands test.txt

图片 14

通过 -f 选项,commands 文件中的三个命令文本都被执行了!

基本命令格式

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

常用选项

Post Author: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注