gawkの正規表現の問題( '\ <'が機能しない)

gawkの正規表現の問題( '\ <'が機能しない)

bashについて少し学びたいです。私は苦しんでいますこのガイドしかし、2番目の例このゾーンgawkでは動作しないようです。

問題は次のコマンドです。

ls -l | awk '/\<(a|x).*\.conf$/ { print $9 }'

\<空白に置き換える場合にのみ機能します。私も試してみましたが、\y運もありませんでした。

ここで何が間違っているのかを知っている人はいますか?

ありがとうございます:)

ベストアンサー1

GNUawkマニュアル(第二。 3.5)は正規表現が\<gawkに固有であることを文書化するので、他の実装では機能しないと予想されます。

~によるとman mawk、特殊文字以外の文字の前にバックスラッシュを入れると、バックスラッシュが削除されます。したがって、 under はmawk単に\<山かっこ文字として解釈されます。

はい

さまざまな動作の例を提供するために正規表現を単純化しました。

$ echo -e " a\n ab.conf\n <ac.conf" | gawk '/\<(a|x)/ { print}'
 a
 ab.conf
 <ac.conf
$ echo -e " a\n ab.conf\n <ac.conf" | mawk '/\<(a|x)/ { print}'
 <ac.conf

繰り返しますが、これは単語の始まりとしてgawk解釈されますが、単純に山括弧として解釈されます。\<mawk

POSIXはこの問題について何を言いますか?

これGNUawkマニュアル説明する:

POSIX awk は、前にリストされた文字の 1 つではなく、文字列定数の文字の前にバックスラッシュを置くと、何が起こるかを意図的に未定義のままにします。

つまり、この場合、異なるawk通訳者が自由に決定を下すことができます。

おすすめ記事