awk (한국어)

From The Awk Programming Language

sub ( r, s , t ) 함수는 먼저 대상 문자열 iv id =에서 정규식 r와 일치하는 가장 왼쪽에있는 가장 긴 하위 문자열을 찾습니다. “bff9aca759″>

; 그런 다음 하위 문자열을 대체 문자열 s로 바꿉니다.

sub(r,s) 함수는 sub(r,s,$0)의 동의어입니다.

sub ( /ana/, "anda" , "banana" ), 예를 들어 bananabandada로 대체됩니다.

sub ( r, s , t )를 실행 한 후 새 문자열을 얻으려면 어떻게해야합니까? 예를 들어 sub ( /ana/, "anda" , "banana" )에서 새 문자열 bandada를 어떻게 가져올 수 있습니까?

하위 함수는 대체 된 수를 반환합니다.

sub의 반환은 0 또는 1입니까? sub 첫 번째 일치 항목 만 찾아서 교체하기 때문에 두 개 이상일 수 없다는 것이 맞습니까?

감사합니다.

답변

GNU awk 매뉴얼 9.1.3 문자열 조작 함수 :

sub()의 세 번째 인수는 변수, 필드 또는 배열 요소 여야합니다. 일부 awk 버전에서는 세 번째 인수가 lvalue가 아닌 표현식이 될 수 있습니다.이 경우 sub()는 여전히 패턴을 검색하고 0 또는 1을 반환하지만 그 결과는 대체 (있는 경우)는 넣을 장소가 없기 때문에 버려집니다. 이러한 버전의 awk는 다음과 같은 표현식을 허용합니다.

sub(/USA/, "United States", "the USA and Canada")

역사적 호환성을 위해 gawk는 이러한 오류 코드를 허용합니다. 그러나 다른 변경 불가능한 개체를 세 번째 매개 변수로 사용하면 치명적인 오류가 발생하고 프로그램이 실행되지 않습니다.

따라서 답은 변수를 사용하는 것입니다.

awk "BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}" bandana 

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다