web-dev-qa-db-ja.com

awk正規表現の境界がOpenBSDで機能しない

このawk式は、OpenBSDで期待どおりにinet 34.45を出力します。

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

ただし、+をバインドされた{1,3}に置き換えると、一致しません。

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

どちらの式も、gawkを使用するLinuxで期待どおりに機能します。 gawkのmanページには、インターバル式と呼ばれるものがもともとawkでサポートされていなかったが、後でegrepとの一貫性を保つためにPOSIXに追加されたと記載されています。 OpenBSDのawkのマニュアルページでは、そのようなことは言及されておらず、通常どおり境界を指定するre_formatのマニュアルページを参照しています。

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

8
Fabian Ritzmann

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

差出人: http://man.openbsd.org/awk.1#STANDARDS

基準

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

14
Paul_Pedant