Nコマンド

大文字のNコマンドは、現在のパターンスペースの後ろに次の入力行を追加し、スクリプトの最初には戻らずにNコマンド以降の処理を続ける。複数行のパターンマッチに使える。

    Nコマンドの基本

    小文字のnコマンドと異なり、パターンスペースが複数行になる。そのため行をまたがったパターンマッチに使える。

    もしパターンスペースに追加する次の入力行がない場合、それ以降のスクリプトは実行せずに処理を終了する(末尾の段階の標準出力はある)。

    input='1行目
    2行目
    3行目'
    
    script='# アドレスなし
    N
    =
    p'
    
    echo "$input" | sed --quiet "$script"
    
    1. まず入力1行目がパターンスペースにコピーされ、Nコマンドによりその後ろに入力2行目が追加される。この段階でパターンスペースは計2行になる。
    2. つづいて、=コマンドによって現在(直近)の入力行番号「2」を出力している(「1」ではない)。
    3. さらに、pコマンドによって現在のパターンスペース(1行目+2行目)を出力している。
    4. 最後に、3行目のサイクルに入るも、Nコマンドで「次の入力行」が存在しないため、すぐ処理を終了している(--quietにより最後の出力もないので、3行目の出力はない)。出力はこうなる。
    2
    1行目
    2行目
    

    複数行のパターンマッチ

    改行のある複数行のパターンマッチに使える。改行の正規表現は\n

    input='いちご
    ケーキ'
    
    script='N
    s/いちご\nケーキ/ショートケーキ/'
    
    echo "$input" | sed "$script"
    

    出力はこうなる。

    ショートケーキ