📜  流编辑器-基本命令

📅  最后修改于: 2020-10-16 06:16:38             🧑  作者: Mango


本章介绍了几个有用的SED命令。

删除命令

SED提供各种命令来操纵文本。让我们首先探讨一下delete命令。这是执行删除命令的方式:

[address1[,address2]]d 

address1address2分别是起始地址和结束地址,可以是行号或模式字符串。这两个地址都是可选参数。

顾名思义,delete命令用于执行删除操作,并且由于SED在线运行,因此可以说该命令用于删除行。请注意,delete命令仅从模式缓冲区中删除行;该行不会发送到输出流,并且原始文件保持不变。以下示例说明了这一点。

[jerry]$ sed 'd' books.txt 

但是输出在哪里?如果没有提供行地址,则默认情况下,SED在每行上运行。因此,它将删除模式缓冲区中的所有行。这就是为什么该命令在标准输出上不打印任何内容的原因。

让我们指示SED仅在某些线路上运行。下面的示例仅删除第4行。

[jerry]$ sed '4d' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

此外,SED还使用逗号(,)接受地址范围。我们可以指示SED移除N1至N2线。例如,以下示例从2到4删除所有行。

[jerry]$ sed '2, 4 d' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED的地址范围不仅限于数字。我们还可以将模式指定为地址。下面的示例删除了作者Paulo Coelho的所有书籍。

[jerry]$ sed '/Paulo Coelho/d' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864 

我们还可以使用文本模式指定地址范围。下面的示例删除了StormFellowship模式之间的所有线条。

[jerry]$ sed '/Storm/,/Fellowship/d' books.txt  
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 

除此之外,我们还可以在SED中使用dollar($),plus(+)和tilde(〜)运算符。

写命令

我们对任何文件执行的重要操作之一是备份,即,我们对该文件进行了另一个副本。 SED提供命令,以将模式缓冲区的内容存储在文件中。下面给出的是write命令的语法,类似于delete命令。

[address1[,address2]]w file 

这里,地址1地址2分别是起始和结束地址,该地址可以是行号或图案字符串。这两个地址都是可选参数。

在以上语法中, w表示写入命令,而file是存储内容的文件名。请注意file参数。提供文件名后,如果文件名不存在,SED会即时创建一个文件,如果文件名已存在,则覆盖该文件。

让我们使用SED精确复制文件。请注意, wfile之间必须恰好有一个空格。

[jerry]$ sed -n 'w books.bak' books.txt 

我们创建了另一个名为books.bak的文件现在,验证两个文件具有相同的内容。

[jerry]$ diff books.txt books.bak  
[jerry]$ echo $?

执行上述代码后,您将得到以下结果:

0

您可以假设cp命令执行的操作完全相同。是! cp命令执行相同的操作,但是SED是成熟的实用程序。它允许创建一个仅包含源文件中某些行的文件。让我们仅将偶数行存储到另一个文件。

[jerry]$ sed -n '2~2 w junk.txt' books.txt  
[jerry]$ cat junk.txt 

执行上述代码后,您将得到以下结果:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
6) A Game of Thrones, George R. R. Martin, 864 

您也可以在write命令中使用逗号(,),美元($)和加号(+)运算符。

除此之外,SED还支持使用write命令进行模式匹配。假设您要将各个作者的所有书籍都存储到一个单独的文件中。一种无聊且冗长的方法是手动执行操作,而更聪明的方法是使用SED。

[jerry]$ sed -n -e '/Martin/ w Martin.txt' -e '/Paulo/ w Paulo.txt' -e '/Tolkien/ w 
Tolkien.txt' books.txt 

在上面的示例中,我们将每行与一个模式匹配,并将匹配的行存储在特定文件中。这很简单。要指定多个命令,我们使用了SED命令的-e开关。现在,让我们使用每个文件包含的内容:

[jerry]$ cat Martin.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
6) A Game of Thrones, George R. R. Martin, 864

让我们显示文件内容。

[jerry]$ cat Paulo.txt

执行上述代码后,您将得到以下结果:

3) The Alchemist, Paulo Coelho, 197 
5) The Pilgrimage, Paulo Coelho, 288 

让我们显示文件内容。

[jerry]$ cat Tolkien.txt

执行上述代码后,您将得到以下结果:

2) The Two Towers, J. R. R. Tolkien, 352 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 

优秀的!我们得到了预期的结果。 SED确实是一个了不起的实用程序。

追加命令

任何文本编辑器最有用的操作之一就是提供附加功能。 SED通过其append命令支持此操作。下面给出了append的语法:

[address]a\ 
Append text 

让我们在第4行之后追加一个新书条目。下面的示例演示了如何做

[jerry]$ sed '4 a 7) Adultry, Paulo Coelho, 234' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

在命令部分, 4表示行号, a是附加命令,其余部分是要附加的文本。

让我们在文件末尾插入一个文本行。为此,使用$作为地址。以下示例说明了这一点:

[jerry]$ sed '$ a 7) Adultry, Paulo Coelho, 234' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 
7) Adultry, Paulo Coelho, 234 

除了行号,我们还可以使用文本模式指定地址。例如,以下示例在匹配字符串The Alchemist之后追加文本。

[jerry]$ sed '/The Alchemist/ a 7) Adultry, Paulo Coelho, 234' books.txt  

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 

请注意,如果有多个匹配的模式,则在每次匹配后都会附加文本。以下示例说明了这种情况。

[jerry]$ sed '/The/ a 7) Adultry, Paulo Coelho, 234' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
7) Adultry, Paulo Coelho, 234 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 234 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
7) Adultry, Paulo Coelho, 234 
5) The Pilgrimage, Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 234 
6) A Game of Thrones, George R. R. Martin, 864 

变更指令

SED提供由c表示的更改替换命令。此命令有助于用新文本替换现有行。提供行范围时,所有行将被单个文本行作为一组替换。下面给出了change命令的语法:

[address1[,address2]]c\ 
Replace text

让我们用其他一些文本代替第三行。

[jerry]$ sed '3 c 3) Adultry, Paulo Coelho, 324' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

SED还接受模式作为地址。在以下示例中,模式匹配成功后将替换一行。

[jerry]$ sed '/The Alchemist/ c 3) Adultry, Paulo Coelho, 324' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864 

SED还允许用单条线替换多条线。下面的示例从第四到第六行删除行,并用新文本替换它们。

[jerry]$ sed '4, 6 c 4) Adultry, Paulo Coelho, 324' books.txt  

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) Adultry, Paulo Coelho, 324

插入命令

insert命令的工作方式与append相同。唯一的区别是,它在特定位置之前插入了一行。下面是插入命令的语法:

[address]i\ 
Insert text 

让我们通过一些示例来了解insert命令。以下命令在第四行之前插入一个新条目。

[jerry]$ sed '4 i 7) Adultry, Paulo Coelho, 324' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
7) Adultry, Paulo Coelho, 324 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

在上面的示例中, 4是位置编号, i表示插入命令,其余部分是要插入的文本。

要在文件开头插入文本,请提供行地址为1 。以下命令说明了这一点:

[jerry]$ sed '1 i 7) Adultry, Paulo Coelho, 324' books.txt

执行上述代码后,您将得到以下结果:

7) Adultry, Paulo Coelho, 324 
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

此外,我们可以插入多行。以下命令在最后一行之前插入两行。

[jerry]$ sed '$ i 7) Adultry, Paulo Coelho, 324

执行上述代码后,您将得到以下结果:

8) Eleven Minutes, Paulo Coelho, 304' books.txt 
1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage,Paulo Coelho, 288 
7) Adultry, Paulo Coelho, 324 
8) Eleven Minutes, Paulo Coelho, 304 
6) A Game of Thrones, George R. R. Martin, 864

请注意,要插入的条目在单独的行上输入,并由反斜杠(\)字符分隔。

翻译命令

SED提供翻译字符的命令,它表示为y 。它按位置转换字符。下面给出了translate命令的语法:

[address1[,address2]]y/list-1/list-2/

请注意,转换是基于字符从列表1列表2中相同位置的字符的位置,并且两个列表都必须是显式字符列表。不支持正则表达式和字符类。此外,列表1列表2的大小必须相同。

下面的示例将阿拉伯数字转换为罗马数字。

[jerry]$ echo "1 5 15 20" | sed 'y/151520/IVXVXX/' 

执行上述代码后,您将得到以下结果:

I V IV XX 

l命令

您能否仅通过查看来区分由空格分隔的单词和由制表字符分隔的单词?当然不是。但是SED可以为您做到这一点。 SED使用l命令在文本中显示隐藏的字符。例如,带有\ t的制表字符和带有$字符的行尾。下面给出的是l命令的语法。

[address1[,address2]]l 
[address1[,address2]]l [len] 

让我们创建一个带有制表字符的文件进行演示。为简单起见,我们将使用相同的文件,只是用制表符替换空格。等待!但是,该如何做-通过在文本编辑器中打开文件并用tab替换每个空格呢?当然不是!我们可以为此使用SED命令。

[jerry]$ sed 's/ /\t/g' books.txt > junk.txt 

现在,让我们使用l命令显示隐藏的字符:

[jerry]$ sed -n 'l' junk.txt

执行上述代码后,您将得到以下结果:

1)\tA\tStorm\tof\tSwords,George\tR.\tR.\tMartin,1216$ 
2)\tThe\tTwo\tTowers,J.\tR.\tR.\tTolkien,352$ 
3)\tThe\tAlchemist,Paulo\tCoelho,197$ 
4)\tThe\tFellowship\tof\tthe\tRing,J.\tR.\tR.\tTolkien,432$ 
5)\tThe\tPilgrimage,Paulo\tCoelho,288$ 
6)\tA\tGame\tof\tThrones,George\tR.\tR.\tMartin\t,864$

与其他SED命令一样,它也接受行号和模式作为地址。您可以自己尝试。

让我们仔细看看SED的另一个有趣功能。我们可以指示SED在一定数量的字符后执行换行。下面的示例在25个字符后换行。

[jerry]$ sed -n 'l 25' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords,Geo\ 
rge R. R. Martin,1216$ 
2) The Two Towers,J. R. \ 
R. Tolkien,352$ 
3) The Alchemist,Paulo C\ 
oelho,197$ 
4) The Fellowship of the\ 
 Ring,J. R. R. Tolkien,4\ 
32$ 
5) The Pilgrimage,Paulo \ 
Coelho,288$ 
6) A Game of Thrones,Geo\ 
rge R. R. Martin ,864$

请注意,在上面的示例中,在l命令之后提供了换行限制。在这种情况下,它是25个字符。此选项是GNU特定的,可能无法与SED的其他变体一起使用。

除非有新的行字符的0意味着包装的限制从来没有断行。以下简单命令说明了这一点。

[jerry]$ sed -n 'l 0' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords,George R. R. Martin,1216$ 
2) The Two Towers,J. R. R. Tolkien,352$ 
3) The Alchemist,Paulo Coelho,197$ 
4) The Fellowship of the Ring,J. R. R. Tolkien,432$ 
5) The Pilgrimage,Paulo Coelho,288$ 
6) A Game of Thrones,George R. R. Martin,864$ 

退出命令

退出命令指示SED退出当前执行流程。它由q命令表示。下面给出的是quit命令的语法:

[address]q 
[address]q [value]

请注意,quit命令不接受地址范围,它仅支持单个地址。默认情况下,SED遵循读取,执行和重复工作流程。但是当遇到quit命令时,它只是停止当前执行。

让我们打印文件的前3行。

[jerry]$ sed '3 q' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

除了行号,我们还可以使用文本模式。模式匹配成功时,以下命令退出。

[jerry]$ sed '/The Alchemist/ q' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

除此之外,SED还可以接受,可作为退出状态的。以下命令将其退出状态显示为100。

[jerry]$ sed '/The Alchemist/ q 100' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197

现在让我们验证退出状态。

[jerry]$ echo $? 

执行上述代码后,您将得到以下结果:

100

读命令

我们可以指示SED读取文件的内容并在特定条件匹配时显示它们。该命令由字母r表示。下面给出的是read命令的语法。

[address]r file

请注意, r命令和文件名之间必须只有一个空格。

让我们用一个简单的例子来理解它。创建一个名为junk.txt的示例文件。

[jerry]$ echo "This is junk text." > junk.txt 

以下命令指示SED读取junk.txt的内容并将其插入第三行之后。

[jerry]$ sed '3 r junk.txt' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

在上面的示例中,3表示行地址, r是命令名称,而junk.txt是要显示其内容的文件名。此外,GNU SED还接受一系列地址。例如,以下命令在第三,第四和第五行之后插入junk.txt的内容。

[jerry]$ sed '3, 5 r junk.txt' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
This is junk text. 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864

与其他SED命令一样,read命令也接受模式作为地址。例如,以下命令在模式匹配成功时插入junk.txt的内容。

[jerry]$ sed '/Paulo/ r junk.txt' books.txt  

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
3) The Alchemist, Paulo Coelho, 197 
This is junk text. 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
This is junk text. 
6) A Game of Thrones, George R. R. Martin, 864 

执行命令

我们可以通过执行命令从SED执行外部命令。它由e表示。下面给出了execute命令的语法。

[address1[,address2]]e [command]

让我们用一个简单的例子来说明execute命令。以下SED命令在第三行之前执行UNIX date命令。

[jerry]$ sed '3 e date' books.txt

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:04:49 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

像其他命令一样,它也接受模式作为地址。例如,以下示例在模式匹配成功时执行date命令。注意,在每个模式匹配之后,首先执行命令,然后显示模式缓冲区的内容。

[jerry]$ sed '/Paulo/ e date' books.txt 

执行上述代码后,您将得到以下结果:

1) A Storm of Swords, George R. R. Martin, 1216 
2) The Two Towers, J. R. R. Tolkien, 352 
Sun Sep  7 18:06:04 IST 2014 
3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
Sun Sep  7 18:06:04 IST 2014 
5) The Pilgrimage, Paulo Coelho, 288 
6) A Game of Thrones, George R. R. Martin, 864

如果仔细观察e命令的语法,您会注意到该命令是可选的。当e之后没有提供任何命令时它将模式缓冲区的内容视为外部命令。为了说明这一点,让我们用一些简单的命令创建一个commands.txt文件。

[jerry]$ echo -e "date\ncal\nuname" > commands.txt 
[jerry]$ cat commands.txt

执行上述代码后,您将得到以下结果:

date 
cal 
uname

来自文件的命令是不言自明的。在e之后没有命令时 SED会一一执行所有这些命令。下面的简单示例对此进行了说明。

[jerry]$ sed 'e' commands.txt 

执行上述代码后,您将得到以下结果:

Sun Sep  7 18:14:20 IST 2014 
   September 2014      
Su Mo Tu We Th Fr Sa   
    1  2  3  4  5  6   
 7  8  9 10 11 12 13   
14 15 16 17 18 19 20   
21 22 23 24 25 26 27   
28 29 30               
                       
Linux 

像其他SED命令一样,execute命令也接受所有有效地址范围。

杂项命令

默认情况下,SED在单行上运行,但是也可以在多行上运行。多行命令由大写字母表示。例如,与n命令不同, N命令不会清除并打印图案空间。相反,它在当前模式空间的末尾添加换行符(\ n),并将输入文件的下一行追加到当前模式空间,并通过执行其余的SED命令继续执行SED的标准流程。下面给出的是N命令的语法。

[address1[,address2]]N

让我们打印以逗号分隔的书名及其作者列表。以下示例说明了这一点。

[jerry]$ sed 'N; s/\n/, /g' books.txt 

执行上述代码后,您将得到以下结果:

A Storm of Swords, George R. R. Martin 
The Two Towers, J. R. R. Tolkien 
The Alchemist, Paulo Coelho 
The Fellowship of the Ring, J. R. R. Tolkien 
The Pilgrimage, Paulo Coelho 
A Game of Thrones, George R. R. Martin

让我们了解以上示例的工作方式。 N命令将第一行(即“剑之风暴”)读入模式缓冲区,并在\ n后面加上下一行。模式空间现在包含《剑风暴》 \ n乔治·RR·马丁。下一步,我们用逗号替换换行符。

p命令一样,我们有一个P命令来打印由N命令创建的多行模式空间的第一部分(直到嵌入的换行符)。下面给出的是P命令其类似于p命令的语法。

[address1[,address2]]P 

在前面的示例中,我们看到N命令创建了以换行符分隔的书名及其作者列表。让我们仅打印其中的第一部分,即仅打印书名。以下命令对此进行了说明。

[jerry]$ sed -n 'N;P' books.txt

执行上述代码后,您将得到以下结果:

A Storm of Swords 
The Two Towers 
The Alchemist 
The Fellowship of the Ring 
The Pilgrimage 
A Game of Thrones

注意,在没有N的情况下,它的行为与p命令相同。以下简单命令说明了这种情况。

[jerry]$ sed -n 'P' books.txt

执行上述代码后,您将得到以下结果:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones 
George R. R. Martin

除此之外,SED还提供了一个v命令来检查版本。如果提供的版本大于安装的SED版本,则命令执行失败。请注意,此选项是GNU特定的,可能无法与SED的其他变体一起使用。下面给出的是v命令的语法。

[address1[,address2]]v [version]

首先,找出SED的当前版本。

[jerry]$ sed --version 

执行上述代码后,您将得到以下结果:

sed (GNU sed) 4.2.2 

在以下示例中,SED版本大于4.2.2版本,因此SED命令中止其执行。

[jerry]$ sed 'v 4.2.3' books.txt 

执行上述代码后,您将得到以下结果:

sed: -e expression #1, char 7: expected newer version of sed

但是,如果提供的版本小于或等于版本4.2.2,则该命令将按预期工作。

[jerry]$ sed 'v 4.2.2' books.txt

执行上述代码后,您将得到以下结果:

A Storm of Swords 
George R. R. Martin 
The Two Towers 
J. R. R. Tolkien 
The Alchemist 
Paulo Coelho 
The Fellowship of the Ring 
J. R. R. Tolkien 
The Pilgrimage 
Paulo Coelho 
A Game of Thrones George R. R. Martin