awk에서 줄의 첫 번째 알파벳 문자 색인을 추출하는 방법

awk에서 줄의 첫 번째 알파벳 문자 색인을 추출하는 방법

awk에서 줄의 첫 번째 알파벳 문자 색인을 추출하는 방법은 무엇입니까?

나는 바랐다

echo 123XYZ | awk '{print index($1,"[:alpha:]")}' 

4를 반환합니다.

답변1

GNU awk 매뉴얼정규 표현식이 허용되지 않는다고 나와 있습니다 index().

인덱스(in,find)

[...]

BWK awk 및 gawk의 경우 조회에 정규식 상수를 사용하는 것은 치명적인 오류입니다. 다른 구현에서는 단순히 정규식 상수를 "$0 ~ /regexp/"를 의미하는 표현식으로 처리하여 이를 허용합니다. (DC)


당신이 사용할 수있는 match():

echo "123XYZ" | awk '{match($0,/[[:alpha:]]/); print RSTART}' 
4

이는 가장 왼쪽의 첫 번째 알파벳 문자와 일치합니다. a 뒤에는 match()내장 변수가 RSTART있으며 RLENGTH일치하는 문자열의 인덱스와 길이를 포함하므로 첫 번째 변수를 인쇄합니다.


참고: 이는 [:alpha:]자체 정의된 정규 표현식과 일치하지 않는 문자 유형입니다. "하나의 알파벳 문자"를 의미하려면 []다음과 같이 묶어야 합니다 [[:alpha:]].

에서 man awk:

문자 클래스는 문자 목록 대괄호 안의 정규식 내에서만 유효합니다. 문자 클래스는 [:, 클래스를 나타내는 키워드, 및:]로 구성됩니다.

관련 정보