sedスクリプトのアドレスとコマンド


    sedスクリプトのコマンド

    sedスクリプトのコマンドは30個くらいあり、現在のパターンスペースをどのように処理するかの指令コマンド。当サイトで単に「コマンド」という場合はBash(Linux)のコマンドのことではない。


    アドレス

    アドレスとは、現在のパターンスペースに対してコマンドを適用するか否かを決める条件のこと。


    アドレス不可のコマンド

    :(ラベル)コマンドはアドレスを使えないため、書式は単に: ラベル名。これはスクリプト中の任意の位置にラベル(目印)を付けておいて他の場所からジャンプするためのコマンドなので、アドレスを使用できない。詳しくはラベルへ。


    アドレスを使わない例

    アドレスを使えるのに使わないケース。すべての入力行からのパターンスペースにコマンドが適用される。書式はコマンドだけ。

    input='1行目
    2行目
    3行目'
    
    script='# =コマンドは、「現在の」パターンスペースの行番号表示
    # アドレスなしのため全ての行に適用。各行は自分のサイクルに来たら「現在の」になる
    ='
    
    echo "$input" | sed "$script"
    

    出力はこうなる。

    1
    1行目
    2
    2行目
    3
    3行目
    

    アドレス1個の例

    アドレスにマッチした入力行からのパターンスペースにコマンドが適用される。

    書式はアドレス コマンドとする。アドレスとコマンドの間はスペースを入れなくてもよいが、ここではすべて入れて表記する。

    また、アドレスにマッチしなかった行もすでにパターンスペースにコピーされているのであり、スクリプト末尾の段階で残ったパターンスペースは標準出力されるのがデフォルト。

    input='1行目
    2行目
    3行目'
    
    script='# マーク部分がアドレスで、2行目にコマンド適用ということ
    # =コマンド(行番号表示)を2行目に適用
    2 =
    
    # スクリプト末尾になるたび、現在のパターンスペース出力がデフォルト。そして冒頭へ戻り、次の行へ'
    
    echo "$input" | sed "$script"
    

    出力はこうなる。

    1行目
    2
    2行目
    3行目
    

    アドレス2個の例

    下記の書式で、アドレス1からアドレス2までの範囲の入力行からのパターンスペースにコマンドが適用される。,でアドレスを区切る。

    アドレス1,アドレス2 コマンド
    input='1行目
    2行目
    3行目'
    
    script='# マーク部分がアドレス
    # =コマンド(行番号表示)を1行目から2行目まで適用
    1,2 =
    
    # スクリプト末尾になるたび、現在のパターンスペース出力がデフォルト。そして冒頭へ戻り、次の行へ'
    
    echo "$input" | sed "$script"
    

    出力はこうなる。

    1
    1行目
    2
    2行目
    3行目