Sedチュートリアル(4)のSedモードバッファ
6763 ワード
どのファイルにも基本的な操作を行い、その内容を表示します.この目的を達成するために、印刷モードバッファの印刷コマンドを使用することができます.このチュートリアルでは、より多くのモードバッファについて説明し、関連するモードバッファの異なる演算子を使用するファイルの内容を印刷する方法について説明します.
テキストファイルがあることを考えてみましょうtxtは処理され、以下の内容があります.
Sed pコマンド
Sed'p'コマンドを使用して、指定したファイルの内容を印刷します.
次は簡単なコマンドでファイルbooksを印刷します.txtの内容.
上のコードを実行すると、次の結果が得られます.
行ごとに2回印刷される理由を見つけましょう.実際、デフォルトでは、sedはモードバッファの内容を印刷します.さらに,コマンド部分printコマンドに明確にアクセスした.そのため、1行に2回印刷されました.
Sedには、モードバッファのデフォルト印刷を抑制する-nオプションがあります.次のコマンドを試してみましょう.
上のコードを実行すると、次の結果が得られます.
Sedアドレス範囲
デフォルトでは、sedはすべてのローで動作します.ただし、sedは一部の行でのみ使用するように強制できます.
フォーマット:[address]p、addressは指定した行です.
たとえば、次の例ではsedは3行目にのみ実行されます.この例では、sedコマンドの前のアドレス範囲を指定します.
上のコードを実行すると、次の結果が得られます.
Sed commaコマンド
カンマ(,)演算子を使用して、アドレス範囲内のすべてのローを指定します.
フォーマット:[address 1],[address 2],address 1は開始行数,address 2は終了行数
次のコードは2〜5行印刷します.
上のコードを実行すると、次の結果が得られます.
Sed$演算子
次のように、ドル記号$演算子を使用してファイルの最後の行を印刷できます.
上のコードを実行すると、次の結果が得られます.
ドル記号($)を使用してアドレス範囲を指定することもできます.
フォーマット:[address],$
次の例では、3行目から最後の行まで印刷します.
上のコードを実行すると、次の結果が得られます.
Sed加算演算子
sedのプラス記号(+)演算子は、カンマ(,)演算子と組み合わせて使用できます.
フォーマット:[address],+[address 2],address 1は開始行数,address 2は次の行数を表す
次の例では、2行目から次の4行目まで印刷します.
上のコードを実行すると、次の結果が得られます.
Sed波線演算子
波打ち記号(〜)演算子を使用してアドレス範囲を指定することもできます.M〜n形式である.これは、開始行数Mと、n(回)行毎の処理、すなわち、間隔行数を示している.
例えば、50〜5行番号50、55、60、65など.印刷されたファイルから奇数行しかありません.
上のコードを実行すると、次の結果が得られます.
次のコードは偶数行のファイルのみを印刷します.
上のコードを実行すると、次の結果が得られます.
テキストファイルがあることを考えてみましょう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 pコマンド
Sed'p'コマンドを使用して、指定したファイルの内容を印刷します.
次は簡単なコマンドでファイルbooksを印刷します.txtの内容.
[jerry]$ sed 'p' books.txt
上のコードを実行すると、次の結果が得られます.
1) A Storm of Swords, George R. R. Martin, 1216
1) A Storm of Swords, George R. R. Martin, 1216
2) The Two Towers, J. R. R. Tolkien, 352
2) The Two Towers, J. R. R. Tolkien, 352
3) The Alchemist, Paulo Coelho, 197
3) The Alchemist, Paulo Coelho, 197
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
4) The Fellowship of the Ring, J. R. R. Tolkien, 432
5) The Pilgrimage, Paulo Coelho, 288
5) The Pilgrimage, Paulo Coelho, 288
6) A Game of Thrones, George R. R. Martin, 864
6) A Game of Thrones, George R. R. Martin, 864
行ごとに2回印刷される理由を見つけましょう.実際、デフォルトでは、sedはモードバッファの内容を印刷します.さらに,コマンド部分printコマンドに明確にアクセスした.そのため、1行に2回印刷されました.
Sedには、モードバッファのデフォルト印刷を抑制する-nオプションがあります.次のコマンドを試してみましょう.
[jerry]$ sed -n 'p' 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アドレス範囲
デフォルトでは、sedはすべてのローで動作します.ただし、sedは一部の行でのみ使用するように強制できます.
フォーマット:[address]p、addressは指定した行です.
たとえば、次の例ではsedは3行目にのみ実行されます.この例では、sedコマンドの前のアドレス範囲を指定します.
[jerry]$ sed -n '3p' books.txt
上のコードを実行すると、次の結果が得られます.
3) The Alchemist, Paulo Coelho, 197
Sed commaコマンド
カンマ(,)演算子を使用して、アドレス範囲内のすべてのローを指定します.
フォーマット:[address 1],[address 2],address 1は開始行数,address 2は終了行数
次のコードは2〜5行印刷します.
[jerry]$ sed -n '2,5 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
Sed$演算子
次のように、ドル記号$演算子を使用してファイルの最後の行を印刷できます.
[jerry]$ sed -n '$ p' books.txt
上のコードを実行すると、次の結果が得られます.
6) A Game of Thrones, George R. R. Martin, 864
ドル記号($)を使用してアドレス範囲を指定することもできます.
フォーマット:[address],$
次の例では、3行目から最後の行まで印刷します.
[jerry]$ sed -n '3,$ 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
6) A Game of Thrones, George R. R. Martin, 864
Sed加算演算子
sedのプラス記号(+)演算子は、カンマ(,)演算子と組み合わせて使用できます.
フォーマット:[address],+[address 2],address 1は開始行数,address 2は次の行数を表す
次の例では、2行目から次の4行目まで印刷します.
[jerry]$ sed -n '2,+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波線演算子
波打ち記号(〜)演算子を使用してアドレス範囲を指定することもできます.M〜n形式である.これは、開始行数Mと、n(回)行毎の処理、すなわち、間隔行数を示している.
例えば、50〜5行番号50、55、60、65など.印刷されたファイルから奇数行しかありません.
[jerry]$ sed -n '1~2 p' books.txt
上のコードを実行すると、次の結果が得られます.
1) A Storm of Swords, George R. R. Martin, 1216
3) The Alchemist, Paulo Coelho, 197
5) The Pilgrimage, Paulo Coelho, 288
次のコードは偶数行のファイルのみを印刷します.
[jerry]$ sed -n '2~2 p' books.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