ホームページ  >  記事  >  システムチュートリアル  >  総まとめ:Linux sedの複数行処理を詳しく解説

総まとめ:Linux sedの複数行処理を詳しく解説

WBOY
WBOY転載
2024-01-05 16:11:491058ブラウズ

通常の状況では、sed は処理対象の行をパターン空間に読み取り、スクリプト内のコマンドはスクリプトが実行されるまでその行を次々に処理し、その後行が出力されてパターン空間は空のままになります。次に、前の操作を繰り返し、ファイルが完全に処理されるまでファイル内の新しい行が読み取られます。ただし、ユーザーがスクリプト内の特定のコマンドを特定の条件で実行したい場合や、パターン空間を次の処理のために保持しておきたい場合など、さまざまな理由により、sed がファイルの処理時に指示に従わない場合があります。通常のプロセス。現時点では、sed はユーザーの要件を満たすためにいくつかの高度なコマンドをセットアップしています。 sed の高度なコマンドを学習したい場合は、まず次の 2 つのバッファ領域を理解する必要があります。

1. パターン空間の定義: パターン空間は、sed が入力端から読み取った内容を保存するバッファー領域です。

2. ホールド スペースの定義: ホールド スペースは、パターン スペース データを処理するときにデータを一時的にキャッシュするために使用されます。

コマンド パラメータもいくつかあります:

g: ホールドスペースの内容をパターンスペースにコピーし、元のパターンスペースの内容をクリアします

G: ホールド スペースのコンテンツをパターン スペースに追加します\n
h: パターンスペースの内容をホールドスペースにコピーし、元のホールドスペースの内容はクリアされます
H: スペースを保持するためにパターン スペースにコンテンツを追加します\n
x: パターンスペースとホールドスペースの内容を交換します

たとえば、ファイルの内容を逆にしたい場合、ファイルは次のようになります:

リーリー

次のコマンドを実行します:

リーリー

上記の実行プロセスを徐々に理解していきましょう

1. 次の 3 つのコマンドを分析してみましょう:

    2,$G: Gコマンドを2行目から最終行まで実行します
  • h: hコマンドを実行
  • $!d: 最後の行を除くすべての行を削除します
2. 具体的な操作

    最初の行までスキャン
    1. パターン スペースに 1 行を挿入します。この時点ではパターン スペースはまだ 1 行です。
    2. h コマンドを直接実行すると、この時点での一時記憶領域は 1 行になります。
    3. d コマンドを実行して、パターン スペース内のデータを 1 行だけ削除します。削除後のパターン スペースは空になります。
    2行目までスキャン
  1. パターンスペースに2行を配置します
    1. G コマンドを実行して、パターン スペースの 2 行の後ろに一時記憶スペースの 1 行を追加します。このとき、パターン スペースは 2 行です\n1-line;
    2. h コマンドを実行すると、一時記憶領域の内容は 2 行\n1 行;
    3. dコマンドを実行するとパターンスペースがクリアされます
    3行目までスキャン
  2. パターンスペースに3行を入れます、
    1. G コマンドを実行して、パターン スペースの 3 行の後ろに一時スペースの 2 行\n1 行を追加します。このとき、パターン スペースは 3 行\n2 行\になりますn1 行;
    2. h コマンドを実行すると、一時記憶領域の内容は 3 行\n2 行\n1 行;
    3. $!d を実行しないでください;
    直接出力 3行\n2行\n1行
  3. もちろん、コマンド sed '1!G;h;$!d' tmp にもこの効果があります。

以上が総まとめ:Linux sedの複数行処理を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はjb51.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。