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" )
, 예를 들어 banana
는 bandada
로 대체됩니다.
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