GNU/Linux >> Linux の 問題 >  >> Linux

完全なSedコマンドガイド[実際の例で説明]

前回の記事では、実際のユースケースで、ストリームエディタであるSedの基本的な使用法を示しました。今日は、sed実行モデルの詳細なツアーに参加するため、Sedについてより多くの洞察を得る準備をしてください。

これは、すべてのSedコマンドを徹底的にレビューし、それらの詳細と微妙さを掘り下げる機会でもあります。

したがって、準備ができたら、ターミナルを起動し、テストファイルをダウンロードして、キーボードの前に快適に座ります。今すぐ調査を開始します!

Sedに関する少しの理論

sed実行モデルの最初の外観

Sedを真に理解するには、まずツール実行モデルを理解する必要があります。

データを処理するとき、Sedは一度に1行の入力を読み取り、それをいわゆるパターンスペースに格納します。 。 Sedのすべての変換は、パターン空間に適用されます。変換は、コマンドラインまたは外部のSedスクリプトファイルで提供される1文字のコマンドで記述されます。ほとんどのSedコマンドの前に、スコープを制限するためのアドレスまたはアドレス範囲を付けることができます。

デフォルトでは、Sedは各処理サイクルの最後、つまりパターンスペースを次の入力行で上書きする直前にパターンスペースのコンテンツを出力します。そのモデルを次のように要約できます:

  1. 次の入力行をパターンスペースに読み込んでみてください

読み取りが成功した場合:

  1. アドレスが現在の入力行と一致するすべてのコマンドをスクリプト順に適用します
  2. sedがクワイエットモードで起動されなかった場合(-n )(変更される可能性のある)パターンスペースのコンテンツを印刷する
  3. 1に戻りました。

各行が処理されるとパターンスペースの内容が失われるため、長期保存には適していません。そのために、Sedには2番目のバッファーであるホールドスペースがあります。 。 Sedは、明示的に要求しない限り、ホールドスペースからデータをクリア、配置、または取得することはありません。これについては、後で交換、取得、および保留のコマンドを検討するときにさらに詳しく調査します。

Sed抽象マシン

上で説明したモデルは、多くのSedチュートリアルで説明されているものです。確かに、それは最も基本的なSedプログラムを理解するのに十分正しいです。しかし、より高度なコマンドを掘り下げ始めると、それだけでは不十分であることがわかります。では、もう少しフォーマルになりましょう。

実際、Sedは、状態が3つのバッファー、2つのレジスター、および2つのフラグによって定義される抽象マシンを実装していると見なすことができます。

  • 3つのバッファ 任意の長さのテキストを保存します。はい:3つ !基本的な実行モデルでは、パターンスペースとホールドスペースについて説明しましたが、Sedには3番目のバッファーがあります。キューを追加 。 Sedスクリプトの観点からは、Sedが実行の事前定義された瞬間(大まかに言えば、入力から新しい行を読み取る前、または終了する直前)に自動的にフラッシュするのは書き込み専用バッファーです。
  • Sedは2つのレジスタも保持しています :ラインカウンター (LC)入力から読み取られた行数、およびプログラムカウンターを保持します。 (PC)実行する次のコマンドのインデックス(スクリプトの「位置」)を常に保持します。 Sedは、メインループの一部としてPCを自動的にインクリメントします。ただし、特定のコマンドを使用すると、スクリプトでPCを直接変更して、プログラムの一部をスキップまたは繰り返すこともできます。これは、ループまたは条件ステートメントをSedで実装する方法です。詳細については、以下の専用ブランチセクションをご覧ください。
  • 最後に2つのフラグ 特定のSedコマンドの動作を変更できます:自動印刷フラグ (AP)置換フラグ (SF)。自動印刷フラグが設定の場合 、Sedは、パターンスペースのコンテンツを beforeに自動的に印刷します。 それを上書きします(特に入力の新しい行を読み取る前だけでなく)。自動印刷フラグがクリアの場合 (「設定されていません」)、Sedは、スクリプトに明示的なコマンドがないと、パターンスペースのコンテンツを出力しません。 Sedを「クワイエットモード」で実行すると(-nを使用)、自動印刷フラグをクリアできます。 コマンドラインオプションまたは特別なコメント#nを使用する 最初の行またはスクリプト)。 「置換フラグ」は、置換コマンド(s)によって設定されます。 コマンド)そのアドレスと検索パターンの両方がパターン空間の内容と一致する場合。置換フラグは、新しい各サイクルの開始時、入力から新しい行が読み取られたとき、または条件付き分岐が取得された後にクリアされます。ここでも、ブランチのセクションでそのトピックについて詳しく説明します。

さらに、Sedは、アドレス範囲(範囲アドレスセクションの詳細)を入力したコマンドのリストと、データの読み取りおよび書き込みを行うためのいくつかのファイルハンドルを保持しています。詳細については、読み取りおよび書き込みコマンドの説明を参照してください。

全文を読む

記事の残りの部分は、LHBProメンバーのみが利用できます。今すぐ登録して年間50ドルでこの記事の残りの部分を読み、すべてのメンバー限定の投稿、電子書籍、ビデオコースに無料でアクセスできます。

購読すでにアカウントをお持ちですか?サインイン
Linux
  1. screenieを使用したコマンドラインでのマルチタスク

  2. Sedコマンドで一度に複数のパターンを使用する

  3. コマンド ラインで文字列を 16 進数に変換する

  1. コマンドラインでsortを使用してソートする

  2. sedを使用してコマンドラインでテキストを操作する

  3. sed 特定の行にスペースを含む挿入行

  1. Linuxコマンド-完全ガイド

  2. Linuxのどのコマンド[例で説明]

  3. 実際の例を含むエコーコマンド