awk 프로그래밍 언어에서
이 함수는 먼저
sub ( r, s , t )
정규식과 일치하는 대상 문자열에서 가장 왼쪽에 있는 부분 문자열을 찾은 다음 해당 부분 문자열을 대체 문자열로 바꿉니다.r
t
s
이 기능
sub(r,s)
은 의 동의어입니다sub(r,s,$0)
.
sub ( /ana/, "anda" , "banana" )
예를 들어 in은banana
로 대체됩니다bandada
.
실행 후 sub ( r, s , t )
새 문자열을 얻는 방법은 무엇입니까? 예를 들어, 에서 sub ( /ana/, "anda" , "banana" )
새 문자열을 얻으려면 어떻게 해야 합니까 bandada
?
sub 함수는 대체된 횟수를 반환합니다.
sub
0 또는 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