ストリームエディター-パターン範囲

前の章では、SEDがアドレス範囲を処理する方法を学びました。この章では、SEDがパターン範囲を処理する方法について説明します。パターン範囲は、単純なテキストまたは複雑な正規表現にすることができます。例を見てみましょう。次の例では、著者PauloCoelhoのすべての本を印刷しています。

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

上記のコードを実行すると、次の結果が得られます。

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

上記の例では、SEDは各行で動作し、文字列Pauloに一致する行のみを出力します。

パターン範囲とアドレス範囲を組み合わせることもできます。次の例では、Alchemistの最初の一致から5行目までの行を出力します。

[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

コンマ(、)演算子を使用して、複数のパターン範囲を指定することもできます。次の例では、パターン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(+)演算子を使用できます。次の例では、パターン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を理解するためのいくつかの例のみを提供しました。自分でいくつかの例を試すことで、いつでももっと知ることができます。