awk에서 `sub`를 실행한 후 새 문자열을 얻을 수 있는 곳

awk에서 `sub`를 실행한 후 새 문자열을 얻을 수 있는 곳

awk 프로그래밍 언어에서

이 함수는 먼저 sub ( r, s , t ) 정규식과 일치하는 대상 문자열에서 가장 왼쪽에 있는 부분 문자열을 찾은 다음 해당 부분 문자열을 대체 문자열로 바꿉니다. rts

이 기능 sub(r,s)은 의 동의어입니다 sub(r,s,$0).

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

실행 후 sub ( r, s , t )새 문자열을 얻는 방법은 무엇입니까? 예를 들어, 에서 sub ( /ana/, "anda" , "banana" )새 문자열을 얻으려면 어떻게 해야 합니까 bandada?

sub 함수는 대체된 횟수를 반환합니다.

sub0 또는 1이 반환됩니까 ? sub첫 번째 일치 항목만 찾아 교체하기 때문에 둘 이상이 될 수 없습니다. 이것이 맞습니까?

감사해요.

답변1

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

관련 정보