本章介绍了SED如何处理Pattern Range(模式范围) Pattern Range可以是简单的文本或复杂的正则表达式。下面的示例打印作者Paulo的所有书籍。
[jerry]$sed -n '/Paulo/p' books.txt
执行上述代码后,您将得到以下输出:
3) The Alchemist, Paulo Coelho, 197 5) The Pilgrimage, Paulo Coelho, 288
在上面的示例中,SED在每一行上操作,并且仅打印与字符串Paulo匹配的那些行。
无涯教程还可以将Pattern Range 与Address Range结合在一起。以下示例打印从"Alchemist"的第一个匹配开始到第五行。
[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
还可以使用 逗号(,) 运算符指定多个Pattern Range(模式范围) 。下面的示例打印匹配 "Two" 和 "Pilgrimage" 之间存在的所有行。
[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(+) 运算符。下面的示例查找 "Two" 的第一个匹配项,并在其后打印接下来的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
参考链接
https://www.learnfk.com/sed/sed-pattern-range.html
标签:Coelho,教程,Tolkien,Alchemist,无涯,Two,Paulo,Sed,Pilgrimage From: https://blog.51cto.com/u_14033984/8506239