Sed-basic-commands
ストリームエディター-基本コマンド
この章では、いくつかの便利なSEDコマンドについて説明します。
削除コマンド
SEDは、テキストを操作するためのさまざまなコマンドを提供します。 まず、 delete コマンドについて調べてみましょう。 削除コマンドの実行方法は次のとおりです。
名前が示すように、deleteコマンドは削除操作の実行に使用され、SEDはオンラインで動作するため、このコマンドは行の削除に使用されると言えます。 deleteコマンドは、パターンバッファーからのみ行を削除することに注意してください。行は出力ストリームに送信されず、元のファイルは変更されません。 次の例はポイントを示しています。
しかし、出力はどこにありますか? 行アドレスが指定されていない場合、SEDはデフォルトですべての行で動作します。 したがって、パターンバッファからすべての行が削除されます。 そのため、コマンドは標準出力に何も出力しません。
特定の回線でのみ動作するようにSEDに指示しましょう。 次の例では、4行目のみを削除します。
上記のコードを実行すると、次の結果が得られます。
さらに、SEDはコンマ(、)を使用してアドレス範囲も受け入れます。 N1からN2の行を削除するようにSEDに指示できます。 たとえば、次の例では、2〜4のすべての行を削除します。
上記のコードを実行すると、次の結果が得られます。
SEDのアドレス範囲は数字に限定されていません。 パターンをアドレスとして指定することもできます。 次の例では、著者Paulo Coelhoのすべての書籍を削除します。
上記のコードを実行すると、次の結果が得られます。
テキストパターンを使用してアドレス範囲を指定することもできます。 次の例は、パターン Storm と Fellowship の間のすべての行を削除します。
これに加えて、SEDでドル($)、プラス(+)、チルダ(〜)演算子を使用することもできます。
書き込みコマンド
ファイルに対して実行する重要な操作の1つはバックアップです。つまり、ファイルの別のコピーを作成します。 SEDは、パターンバッファの内容をファイルに保存するための write コマンドを提供します。 以下に示すのは、 delete コマンドに似た write コマンドの構文です。
ここで、 address1 と address2 はそれぞれ開始アドレスと終了アドレスであり、行番号またはパターン文字列のいずれかです。 これらのアドレスは両方ともオプションのパラメーターです。
上記の構文では、 w は書き込みコマンドを指し、 file はコンテンツを保存するファイル名です。 file パラメーターには注意してください。 ファイル名が指定されると、SEDはファイルが存在しない場合はその場でファイルを作成し、既に存在する場合は上書きします。
SEDを使用してファイルの正確なコピーを作成しましょう。 w と file の間にスペースが1つだけあることに注意してください。
- books.bak。*という別のファイルを作成しました。両方のファイルのコンテンツが同じであることを確認します。
上記のコードを実行すると、次の結果が得られます。
上記のコードを実行すると、次の結果が得られます。
writeコマンドでは、コンマ(、)、ドル($)、およびプラス(+)演算子を使用することもできます。
これに加えて、SEDは書き込みコマンドとのパターンマッチングもサポートしています。 個々の著者のすべての本を別のファイルに保存するとします。 退屈で長い方法の1つは手動で行うことであり、より賢い方法はSEDを使用することです。
上記の例では、各行をパターンと照合し、一致した行を特定のファイルに保存しています。 とても簡単です。 複数のコマンドを指定するには、SEDコマンドの -e スイッチを使用しました。 次に、各ファイルの内容を見てみましょう。
上記のコードを実行すると、次の結果が得られます。
ファイルの内容を表示してみましょう。
上記のコードを実行すると、次の結果が得られます。
ファイルの内容を表示してみましょう。
上記のコードを実行すると、次の結果が得られます。
優秀な! 期待どおりの結果が得られました。 SEDは本当に素晴らしいユーティリティです。
追加コマンド
テキストエディタの最も便利な操作の1つは、追加機能を提供することです。 SEDは、appendコマンドを使用してこの操作をサポートしています。 以下に、appendの構文を示します。
行番号4の後に新しい本のエントリを追加しましょう。 次の例は、その方法を示しています
上記のコードを実行すると、次の結果が得られます。
コマンドセクションでは、 4 は行番号、 a は追加コマンド、残りの部分は追加するテキストを意味します。
ファイルの最後にテキスト行を挿入しましょう。 これを行うには、アドレスとして $ を使用します。 次の例でこれを説明します。
上記のコードを実行すると、次の結果が得られます。
行番号とは別に、テキストパターンを使用して住所を指定することもできます。 たとえば、次の例では、文字列 The Alchemist に一致した後にテキストを追加します。
上記のコードを実行すると、次の結果が得られます。
一致するパターンが複数ある場合、各一致の後にテキストが追加されることに注意してください。 次の例は、このシナリオを示しています。
上記のコードを実行すると、次の結果が得られます。
変更コマンド
SEDは、cで表される change または replace コマンドを提供します。 このコマンドは、既存の行を新しいテキストに置き換えるのに役立ちます。 行範囲を指定すると、すべての行がグループとして1つのテキスト行に置き換えられます。 以下に、changeコマンドの構文を示します。
3行目を他のテキストに置き換えてみましょう。
上記のコードを実行すると、次の結果が得られます。
SEDは、アドレスとしてパターンも受け入れます。 次の例では、パターンマッチが成功すると行が置き換えられます。
上記のコードを実行すると、次の結果が得られます。
SEDでは、複数の行を単一の行に置き換えることもできます。 次の例では、4番目から6番目までの行を削除し、新しいテキストに置き換えます。
上記のコードを実行すると、次の結果が得られます。
挿入コマンド
insertコマンドは、appendと同じように機能します。 唯一の違いは、特定の位置の前に行を挿入することです。 挿入コマンドの構文は次のとおりです。
いくつかの例を使用してinsertコマンドを理解しましょう。 次のコマンドは、4行目の前に新しいエントリを挿入します。
上記のコードを実行すると、次の結果が得られます。
上記の例では、 4 はロケーション番号、 i は挿入コマンドを意味し、残りの部分は挿入されるテキストです。
ファイルの先頭にテキストを挿入するには、行アドレスを 1 として指定します。 次のコマンドはこれを示しています。
上記のコードを実行すると、次の結果が得られます。
さらに、複数の行を挿入できます。 次のコマンドは、最後の行の前に2行を挿入します。
上記のコードを実行すると、次の結果が得られます。
挿入されるエントリは個別の行に入力され、バックスラッシュ(\)文字で区切られることに注意してください。
翻訳コマンド
SEDは文字を翻訳するコマンドを提供し、 y として表されます。 位置によってキャラクターを変換します。 以下に、translateコマンドの構文を示します。
変換は、 list 1 から list 2 の同じ位置の文字への文字の位置に基づいており、両方のリストは明示的な文字リストでなければならないことに注意してください。 正規表現と文字クラスはサポートされていません。 さらに、 list 1 と list 2 のサイズは同じでなければなりません。
次の例では、アラビア数字をローマ数字に変換します。
上記のコードを実行すると、次の結果が得られます。
lコマンド
スペースで区切られた単語とタブ文字で区切られた単語を、それらを見るだけで区別できますか? 確かに違います。 ただし、SEDはこれを行うことができます。 SEDは l コマンドを使用して、テキストに隠された文字を表示します。 たとえば、 \ t のタブ文字と $ 文字の行末。 以下に、 l コマンドの構文を示します。
デモンストレーション用のタブ文字を含むファイルを作成しましょう。 簡単にするために、スペースをタブに置き換えるだけで、同じファイルを使用します。 待つ! しかし、それを行う方法-テキストエディターでファイルを開き、各スペースをタブに置き換えますか? 確かに違います! そのためにSEDコマンドを使用できます。
上記のコードを実行すると、次の結果が得られます。
他のSEDコマンドと同様に、アドレスとして行番号とパターンも受け入れます。 自分で試すことができます。
SEDの別の興味深い機能を詳しく見てみましょう。 特定の文字数の後に行の折り返しを実行するようにSEDに指示できます。 次の例では、25文字の後に行を折り返します。
上記のコードを実行すると、次の結果が得られます。
上記の例では、lコマンドの後にラップ制限が提供されていることに注意してください。 この場合、25文字です。 このオプションはGNU固有であり、SEDの他のバリアントでは機能しない場合があります。
折り返し制限が0の場合、改行文字がない限り、行を分割しないことを意味します。 次の簡単なコマンドはこれを示しています。
上記のコードを実行すると、次の結果が得られます。
終了コマンド
Quitコマンドは、現在の実行フローを終了するようにSEDに指示します。 q コマンドで表されます。 quitコマンドの構文は次のとおりです。
quitコマンドはアドレスの範囲を受け入れず、単一のアドレスのみをサポートすることに注意してください。 デフォルトでは、SEDは読み取り、実行、およびワークフローの繰り返しに従います。ただし、quitコマンドが検出されると、単に現在の実行が停止されます。
ファイルの最初の3行を印刷してみましょう。
上記のコードを実行すると、次の結果が得られます。
行番号に加えて、テキストパターンも使用できます。 次のコマンドは、パターンマッチが成功すると終了します。
上記のコードを実行すると、次の結果が得られます。
これに加えて、SEDは終了ステータスとして使用できる*値*を受け入れることもできます。 次のコマンドは、終了ステータスを100と表示します。
上記のコードを実行すると、次の結果が得られます。
次に、終了ステータスを確認しましょう。
上記のコードを実行すると、次の結果が得られます。
読み取りコマンド
ファイルの内容を読み取り、特定の条件が一致したときにそれらを表示するようにSEDに指示できます。 コマンドはアルファベット r で表されます。 以下に、読み取りコマンドの構文を示します。
簡単な例でそれを理解しましょう。 junk.txt というサンプルファイルを作成します。
次のコマンドは、 junk.txt の内容を読み取り、3行目の後に挿入するようにSEDに指示します。
上記のコードを実行すると、次の結果が得られます。
上記の例では、3は行アドレスを意味し、 r はコマンド名、 junk.txt は内容が表示されるファイル名です。 さらに、GNU SEDはさまざまなアドレスも受け入れます。 たとえば、次のコマンドは、 junk.txt の内容を3行目、4行目、5行目の後に挿入します。
上記のコードを実行すると、次の結果が得られます。
他のSEDコマンドと同様に、読み取りコマンドもアドレスとしてパターンを受け入れます。 たとえば、次のコマンドは、パターンマッチが成功したときに junk.txt の内容を挿入します。
上記のコードを実行すると、次の結果が得られます。
コマンド実行
簡単な例でexecuteコマンドを説明しましょう。 次のSEDコマンドは、3行目の前にUNIXの date コマンドを実行します。
上記のコードを実行すると、次の結果が得られます。
他のコマンドと同様に、アドレスとしてパターンも受け入れます。 たとえば、次の例では、パターンマッチが成功したときに date コマンドを実行します。 各パターンが一致した後、最初にコマンドが実行され、次にパターンバッファーの内容が表示されることに注意してください。
上記のコードを実行すると、次の結果が得られます。
上記のコードを実行すると、次の結果が得られます。
ファイルからのコマンドは一目瞭然です。 e の後に command がない場合、SEDはこれらすべてのコマンドを1つずつ実行します。 次の簡単な例はこれを示しています。
上記のコードを実行すると、次の結果が得られます。
他のSEDコマンドと同様に、executeコマンドもすべての有効なアドレス範囲を受け入れます。
その他のコマンド
デフォルトでは、SEDは単一の回線で動作しますが、複数の回線でも動作できます。 複数行のコマンドは大文字で示されます。 たとえば、 n コマンドとは異なり、 N コマンドはパターンスペースをクリアして印刷しません。 代わりに、現在のパターンスペースの最後に改行(\ n)を追加し、入力ファイルの次の行を現在のパターンスペースに追加し、残りのSEDコマンドを実行してSEDの標準フローを続行します。 以下に示すのは、 N コマンドの構文です。
本のタイトルとそれぞれの著者のコンマ区切りリストを印刷してみましょう。 次の例はこれを示しています。
上記のコードを実行すると、次の結果が得られます。
上記の例がどのように機能するかを理解しましょう。 N コマンドは、最初の行、つまりA Sword of Swordsをパターンバッファーに読み込み、\ nの後に次の行を追加します。 パターンスペースにA Storm of Swords * \ n * George Rが含まれるようになりました。 R. マーティン。 次のステップでは、改行をコンマに置き換えます。
前の例では、 N コマンドによって、書籍名とその著者の改行で区切られたリストが作成されることがわかりました。 その最初の部分のみ、つまり本のタイトルのみを印刷しましょう。 次のコマンドはこれを示しています。
上記のコードを実行すると、次の結果が得られます。
上記のコードを実行すると、次の結果が得られます。
これに加えて、SEDはバージョンをチェックする v コマンドも提供します。 提供されたバージョンがインストールされたSEDバージョンよりも大きい場合、コマンドの実行は失敗します。 このオプションはGNU固有であり、SEDの他のバリアントでは機能しない可能性があることに注意してください。 以下に示すのは、 v コマンドの構文です。
まず、SEDの現在のバージョンを確認します。
上記のコードを実行すると、次の結果が得られます。
次の例では、SEDバージョンはバージョン4.2.2よりも大きいため、SEDコマンドは実行を中止します。
上記のコードを実行すると、次の結果が得られます。
ただし、提供されたバージョンがバージョン4.2.2以下の場合、コマンドは期待どおりに機能します。
上記のコードを実行すると、次の結果が得られます。