社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

grep -E が正規表現対応オプションであると勘違いしていた

grep って、global regular expression print の略なので、それ自体が正規表現で一致したものを抽出するコマンドなんですね。
正規表現を使いたい時に、-E オプションを付けるものだと勘違いしていました。

いま、以下のように2行が書かれたファイル(test.txt)があるとします。

$ cat > test.txt
1024
hatena
$ grep ^1 test.txt 
1024

はい。特に -E オプションを付けなくても正規表現でマッチしてくれました。

ところが。

$ grep '^(1|h)' test.txt

これは何も返してくれません。

そこで、-E オプションを付けてみると。

$ grep -E '^(1|h)' test.txt 
1024
hatena

期待する結果を返してくれました。
E オプションをつけることで、拡張正規表現と呼ばれる式が使用出来るようになります。

egrep でもOKです。

$ egrep '^(1|h)' test.txt 
1024
hatena

拡張正規表現を使える = 正規表現を使えると間違って覚えてしまっていたようです。
何気に使用しているオプションについて、意味を正しく理解していないのは宜しくないですね。