Sed-pattern-range

提供:Dev Guides
移動先:案内検索

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

前の章で、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に一致する行のみを出力します。

パターン範囲とアドレス範囲を組み合わせることもできます。 次の例では、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と巡礼の間に存在するすべての行を印刷します。

[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

ここでは、SEDに慣れるためのいくつかの例を提供しました。 自分でいくつかの例を試してみると、いつでも詳細を知ることができます。