TL;DR
- POSIX Issue 8 で 拡張正規表現 (ERE) を使うための
-E
オプションが標準化されます。- もう
sed
で 基本正規表現 (BRE) を使う必要はありません。 - POSIX Issue 8 は 2022 年後期予定ですが今使えるのであれば待つ必要はありません。
-
-r
オプションは-E
と同じ意味の古いオプションです。
- もう
-
s/foo/bar/i
← このi
(ignore case) も POSIX Issue 8 で標準化されます。 -
grep
でも-E
オプションで ERE が使えます。- 昔は POSIX で標準化されていた(?)
egrep
も POSIX.1-2001 で廃止されています。
- 昔は POSIX で標準化されていた(?)
-
grep -E
で ERE、sed -E
で ERE、awk
は最初から ERE です。
標準化に至った経緯
-
-E
オプション -
i
フラグ
移植性について
GNU sed は かなり古い時代から ERE を有効にするオプションとして -r
を持っていました。ここ によると GNU sed 4.0.6 (2003-03-18) から実装されているらしいです。(ただ試したら 3.02 ではドキュメント化されていませんでしたが使えました)。一般的には Debian 3.1 (2005) 頃から使えるようになったと考えて良いでしょう。
そして GNU sed 4.2.0 (2009-04-30) で -r
オプションの移植性があるエイリアスとして -E
オプションが追加されました。Debian 6.0 (2011) 頃より使えるようになったようです。ただしこの頃はまだ互換性のために追加されたアンドキュメントなオプションという扱いで sed --help
に記載されるようになったのは Debian 9 からです。そのため -E
は比較的最近追加されたオプションだと勘違いしている人も多そうです。
一方 FreeBSD ではかなり早く 4.1.1 (1993) の時点で -E
オプションに対応していたようです。NetBSD も 1.6 (1993) の時点で対応していました。OpenBSD は少し遅く 4.7 (2010) のようです。オープンソースの世界では 10 年ぐらい前から使えていたと考えて良いでしょう。
商用 Unix は、いつもの通り対応していませんね(Solaris 11、AIX 7.2)。まあこちらは POSIX で標準化された後に遅れて対応することになるのでしょう。
まとめ
ということで、sed -E
と i
フラグは POSIX Issue 8 標準化されるので(商用 Unix を考慮しなくていいなら)もう安心して使えるようになったということです。POSIX も少しずつ変わっていますね!