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정규식 연산자이고 regexps awk는 POSIX 확장 정규식(ERE)의 변형입니다.

(?!...)(?ERE에 지정되지 않았기 때문에 ERE와 호환되지 않습니다 . 따라서 awk구현 시 이 연산자를 사용할 수 없는 이식 가능한 애플리케이션에 영향을 주지 않으므로 이 연산자를 구현하도록 선택할 수 있습니다.

egrep그러나 이를 지원하는 일부 구현 (예: ast-open 구현)이 있지만 grep -E나는 그런 것을 전혀 알지 못합니다 awk(오류 메시지에 따르면 귀하의 구현은 Brian Kernighan의 원래 구현을 기반으로 한 것으로 보입니다. 간격을 지원하지 않을 수도 있습니다 {x,y}) 비즈니스를 운영합니다). awk는 Perl 정규식 전체가 RE와 호환되지 않기 때문에 PCRE(이식 가능한 Perl 호환 정규식 라이브러리)를 사용할 수 없습니다 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+'

관련 정보