gawk의 정규식 문제('\<'가 작동하지 않음)

gawk의 정규식 문제('\<'가 작동하지 않음)

bash에 대해 조금 배워보려고 합니다. 나는 겪고 있다이 가이드하지만 두 번째 예이 구역gawk에서는 작동하지 않는 것 같습니다.

문제는 다음 명령입니다.

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

\<공백으로 바꾸는 경우에만 작동합니다. 나는 또한 사용해 보았지만 \y운도 없었습니다.

여기서 무엇이 잘못될 수 있는지 아는 사람이 있나요?

감사해요:)

답변1

GNU awk매뉴얼(두번째. 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는 이 문제에 대해 뭐라고 말합니까?

이것GNU awk매뉴얼설명하다:

POSIX awk는 이전에 나열된 문자 중 하나가 아닌 문자열 상수의 문자 앞에 백슬래시를 넣으면 어떤 일이 발생하는지 의도적으로 정의되지 않은 상태로 둡니다.

즉, 이 경우에는 서로 다른 awk통역사가 자유롭게 결정을 내릴 수 있습니다.

관련 정보