pコマンド

pコマンドは現在のパターンスペースを出力する。スクリプト末尾の段階のパターンスペース出力とは別。


    pコマンドの基本

    下記はパターンスペースの出力が、pコマンドによるものとスクリプト末尾の段階のものと両方あるため、出力はこうなる。

    input='1行目
    2行目
    3行目'
    
    # 2行目はpコマンド適用
    echo "$input" | sed '2 p'
    1行目
    2行目
    2行目
    3行目
    

    --quietオプションとともに使う

    次のようにすると、pコマンドとしての出力は行われるが、--quietオプションにより最後の出力は抑制される。

    echo "$input" | sed --quiet '2 p'
    2行目
    

    pコマンドとdコマンド

    上記と同じ結果をdコマンドで出すこともできる。

    # 2行目以外を削除
    echo "$input" | sed '2 ! d'
    2行目
    

    このように--quietを伴ったpコマンドで抽出するのも、逆に抽出したくない行をdコマンドで削除して残りを表示するのも、同じ出力になる。


    pコマンドの使いどころ

    pコマンドは、複数の処理があるスクリプトの途中段階でパターンスペースを出力したいときや、デバッグなどでも使う。

    下記は3つのスクリプトがあり、2番目の段階でいったんパターンスペースを出力している。

    script='# りんごをゴリラに変換
    s/りんご/ゴリラ/
    
    # いったんpコマンドで出力
    p
    
    # それからゴリラをライオンに変換
    s/ゴリラ/ライオン/
    
    # スクリプト末尾の段階の出力'
    
    echo 'りんご' | sed "$script"
    ゴリラ
    ライオン