grepによる正規表現と’-E’をつけた拡張正規表現の違い(and sed)


この記事の所要時間: 140

grep (GNU grep) 2.5.1を使って確認しました。
今日、上司に訊かれたのですが/etc/pam.d/su

の行のコメントをどうやってsedの正規表現を使って外すかということでした。

私はPerlやRubyの正規表現と同じ感覚で以下のように答えました。

はい、全く置換してくれませんでした(ちなみに-iオプションは上書きモードの意味です)。
何度も何度もちょこちょこ修正してやっては見たのですがどうしてもマッチしてくれない・・・。
なんとなくマッチしたところで妥協するしかありませんでした。

マッチした正規表現

もう少し試してみたらやっとマッチする正規表現が見つかりました。

POSIX互換タイプの正規表現

拡張正規表現モードの正規表現

-E は拡張正規表現モードで起動することを意味します。

おわかりいただけるでしょうか?
"+""+" の違いと、集合セットをさらにブラケット [] で囲まなければいけなかったのです。

正解

とういうことで、sedはPOSIX互換の正規表現を受け付けるため

でした。POSIX互換の正規表現では後方参照系はバックスラッシュでエスケープしなければいけないのと、 "$1" ではなく "1" としなければいけないところもポイントでした。

正規表現は本当に方言が多いですね・・・。

参考

投稿者紹介

株式会社ユニキャスト
私たちは、テクノロジに魅せられた個性あふれるメンバーによって構成された茨城県日立市に本社を構えるベンチャー企業です。
”テクノロジを通して「驚き」と「感動」を創造し、人々の「夢」と「笑顔」を支えます。” の経営理念をモットーに明るい未来を描き、ワクワクする企画提案を続けて参ります。

人気の記事

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

PAGE TOP