📜  流编辑器-模式范围

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


在上一章中,我们了解了SED如何处理地址范围。本章介绍SED如何处理模式范围。模式范围可以是简单的文本或复杂的正则表达式。让我们举个例子。下面的示例打印作者Paulo Coelho的所有书籍。

[jerry]$ sed -n '/Paulo/ p' books.txt

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

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

在上面的示例中,SED在每一行上操作,并且仅打印与字符串Paulo匹配的那些行。

我们还可以将模式范围与地址范围结合在一起。下面的示例打印从“炼金术士”的第一个匹配开始到第五行的行。

[jerry]$ sed -n '/Alchemist/, 5 p' books.txt

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

3) The Alchemist, Paulo Coelho, 197 
4) The Fellowship of the Ring, J. R. R. Tolkien, 432 
5) The Pilgrimage, Paulo Coelho, 288

找到模式的第一个匹配项后,我们可以使用Dollar($)字符打印所有行。以下示例查找模式The的第一个匹配项,并立即打印文件中的其余行

[jerry]$ sed -n '/The/,$ p' books.txt

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

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 

我们还可以使用comma(,)运算符指定多个模式范围。下面的示例打印模式2和朝圣之间存在的所有行。

[jerry]$ sed -n '/Two/, /Pilgrimage/ p' books.txt 

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

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

另外,我们可以在模式范围内使用plus(+)运算符。下面的示例查找模式2的第一个匹配项,并在其后打印接下来的4行。

[jerry]$ sed -n '/Two/, +4 p' books.txt

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

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。您总是可以自己尝试一些示例来了解更多。