나는 다음과 같이 제한된 정규식 수량자를 지정하는 개념에 익숙합니다.
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 정규식 확장입니다 . 표준에 해당하는 항목은 각각 , 이지만 아직 지원되지 않습니다 .awk
gawk
\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]