dコマンド

dコマンドは現在のパターンスペースを削除し、それ以降のスクリプトは無視してすぐに次の入力行のサイクルを開始する。


    dコマンドの基本

    input='1行目
    2行目
    3行目'
    
    script='1 d
    a 追加'
    
    echo "$input" | sed "$script"
    

    上記は二つのスクリプトがある。一つ目のdコマンドが実行された場合(入力1行目)、二つ目のaコマンド(テキスト追加)は実行されずに、すぐに次のサイクル(入力2行目)に移る。aコマンドが実行されるのは、dコマンドが実行されないアドレス(行)のみ。そのため出力はこうなる。

    2行目
    追加
    3行目
    追加
    

    空行削除

    空行の正規表現は^$なので、空行削除は

    input='1行目
    
    3行目'
    
    echo "$input" | sed '/^$/ d'
    

    スペースやタブの含まれる可能性がある空行の正規表現は^[[:blank:]]*$。([:blank:][:space:]の違いはman isblank参照。)

    input='1行目
         
    3行目'
    
    # これでは削除できないので
    echo "$input" | sed '/^$/ d'
    
    # こっち
    echo "$input" | sed '/^[[:blank:]]*$/ d'