awk:正規表現ライブラリの主キーが正しくありません。 - (?!etcd|演算子)

awk:正規表現ライブラリの主キーが正しくありません。 - (?!etcd|演算子)

awkの正規表現を改善する必要があります。 regex101で動作します。

/vault-(?!etcd|operator)/

次の項目だけが一致する必要があります。

vault-etcd-abc123
vault-operator-def456
vault-ghi789 <--

試験を終えた:

awk '/vault-(?!etcd|operator)/ {print $1;exit}'

awk: illegal primary in regular expression vault-(?!etcd|operator) at !etcd|operator)

たとえば、いくつかの特殊文字をエスケープしようとしましたが、|期待した結果は出ませんでした。

答え1

(?!...)perl正規表現演算子であり、regexpsawkはPOSIX拡張正規表現(ERE)のバリアントです。

(?!...)(?EREに指定されていないため、EREと互換性がありません。したがってawk、実装はこの演算子を使用できない移植可能なアプリケーションに影響を与えないため、この演算子を実装することを選択できます。

egrepしかし、これをサポートするいくつかの実装(ast-openの実装など)がありますが、grep -E私はそのようなことをまったく知りませんawk(エラーメッセージによると、あなたの実装はBrian Kernighanの元の実装に基づいているようです。間隔をサポートしていない可能性があります{x,y})ビジネスを運営する)。 awkはPerl正規表現全体がREと互換性がないため、移植可能なPerl互換正規表現ライブラリ(PCRE)を使用することはできませんawk(交互演算子の動作やその他の\b意味など)。perlawk

ここでは代わりに使用できますperl

perl -lae 'print $F[0] if /vault-(?!etcd|operator)/'

または、PCREサポート(GNUや対応するオプションなど)をgrep使用できます。-opcregrepgrep-P

grep -Po '^\s*+\K(?=.*vault-(?!etcd|operator))\S+'

関連情報