OpenBSDで動作しないawk正規表現の境界

OpenBSDで動作しないawk正規表現の境界

この awk 式はinet 34.45OpenBSD で期待どおりに印刷されます。

echo "inet 34.45" | awk '/inet [0-9]+\./ { print }'

ただし、+theをboundに置き換えると、{1,3}一致するものはありません。

echo "inet 34.45" | awk '/inet [0-9]{1,3}\./ { print }'

どちらの表現もLinuxのgawkでうまく動作します。 gawkのマニュアルページでは、awkは最初は間隔式をサポートしていませんでしたが、後でegrepとの整合性を維持するためにPOSIXに追加されたと言われています。 OpenBSD の awk のマニュアルページでは、そのような内容に言及するのではなく、通常のように範囲を指定する re_format のマニュアルページを引用します。

これはOpenBSD awkのバグですか、それとも文書化されていない制限ですか?

ベストアンサー1

この制限は明確に文書化されています。

から:http://man.openbsd.org/awk.1#STANDARDS

基準

awkユーティリティはIEEE Std 1003.1-2008("POSIX.1")仕様に準拠していますが、awkは{n、m}パターンマッチングをサポートしていません。

おすすめ記事