拡張正規表現を使う--regexp-extended

sedコマンドのデフォルトは基本正規表現なので、拡張正規表現(+などの表現)を有効にしたいなら--regexp-extendedオプションを付ける。


    拡張正規表現の例

    input='りんごジュース 100円
    みかんジュース 200円
    いちごケーキ 300円
    チョコケーキ 400円'
    
    echo "$input" | sed --regexp-extended '/(2|3)0+円/ d'
    りんごジュース 100円
    チョコケーキ 400円
    

    他言語の拡張正規表現との違い

    PerlやJavaScriptなどで使える(?:マッチ)(?=マッチ)(?!マッチ)といった、「マッチしたものを記憶しない(再利用できない)グループ」表現はsedでは使えない。

    例えば日本(?!語)は後ろに「語」が付かない「日本」にマッチするので、grep --perl-regexpコマンドで試すと機能するが、

    echo '日本語
    日本人' | grep --perl-regexp '日本(?!語)'
    日本人
    

    通常のGNU sedではエラーになってしまう。

    echo '日本語
    日本人' | sed --regexp-extended --quiet '/日本(?!語)/ p'
    sed: -e expression #1, char 16: 無効な前方正規表現です