mawk를 사용하여 정규식 수량자를 지정하는 방법은 무엇입니까?

mawk를 사용하여 정규식 수량자를 지정하는 방법은 무엇입니까?

나는 다음과 같이 제한된 정규식 수량자를 지정하는 개념에 익숙합니다.

Quantifier  Legend               Example    Sample Match

{3}         Exactly three times  \D{3}      ABC
{2,4}       Two to four times    \d{2,4}    156
{3,}        Three or more times  \w{3,}     regex_tutorialer

mawk그러나 매뉴얼 페이지나 온라인에서는 위와 같은 내용을 찾을 수 없습니다.

mawk명령에 이 기능이 있습니까? 아니면 동일한 효과를 얻을 수 있는 다른 방법이 있습니까?

버전을 사용하고 있습니다1.3.3

답변1

POSIX 호환 구현은 공백 정규식 연산자를 지원합니다 awk.

그러나 awk처음에는 지원되지 않았기 때문에(nawk, mawk 또는 gawk 모두 지원되지 않음) 이를 지원하지 않는 구현이 여전히 여러 개 있습니다.mawk, 이것진짜 이상한k(원래 Brian Kernighan이 관리함 awk)며칠 전, Solaris /bin/awk, Solaris /bin/nawk, awk대부분의 BSD.

BRE와 마찬가지로 일부 구현에서는 이전 버전과의 호환성이 손상될 수 있기 때문에 이에 대한 지원을 추가하는 것을 반대합니다(BRE에서 사용되는 것과 유사한 문제는 egrep존재하지 않습니다 ).\{x,y\}grep

\w, \d는 일반적으로 지원되지 않는(busybox 및 (POSIX 모드가 아닌 경우) \D지원) Perl 정규식 확장입니다 . 표준에 해당하는 항목은 각각 , 이지만 아직 지원되지 않습니다 .awkgawk\w[[:alnum:]_][[:digit:]][^[:digit:]]mawk

솔라리스에서는 를 사용해야 합니다 /usr/xpg4/bin/awk.

이전 버전의 GNU에서는 awk이 옵션을 사용하거나 정규식 간격을 지원하는 환경에서 시작해야 합니다 --re-interval.POSIXLY_CORRECT=anything

이를 지원하지 않는 구현의 경우 ?, +및 다음을 조합하여 사용할 수 있습니다 *.

  • x{1,3}-> xx?x?또는(x|xx|xxx)
  • x{1,}->x+
  • x{0,}->x*
  • x{3,}-> xxx+또는xxxx*
  • x{3,6}->xxxx?x?x?
  • 등.

어쨌든 mawk현지화 문자나 멀티바이트 문자는 지원되지 않으므로 ASCII 문자로 제한하고 [_a-zA-Z], [0-9][^0-9]

관련 정보