来自 awk 编程语言
函数 首先查找 目标字符串中
sub ( r, s , t )
与正则表达式匹配的最左边的最长子串 ;然后它用替换字符串替换子字符串。r
t
s
该函数
sub(r,s)
是 的同义词sub(r,s,$0)
。
sub ( /ana/, "anda" , "banana" )
例如, 在 中banana
被替换为bandada
.
运行后sub ( r, s , t )
,如何获取新的字符串?例如,在 中sub ( /ana/, "anda" , "banana" )
,如何获取新字符串bandada
?
sub 函数返回进行替换的次数。
返回的是sub
0还是1?它不能超过一个,因为sub
只找到第一个匹配项并替换它,这是正确的吗?
谢谢。
答案1
来自 GNU awk 手册9.1.3 字符串操作函数:
...第三个参数必须
sub()
是变量、字段或数组元素。某些版本的 awk 允许第三个参数是非左值的表达式。在这种情况下,sub()
仍然搜索模式并返回零或一,但替换的结果(如果有)将被丢弃,因为没有地方放置它。此类版本的 awk 接受如下表达式:
sub(/USA/, "United States", "the USA and Canada")
为了历史兼容性,gawk 接受这样的错误代码。但是,使用任何其他不可更改的对象作为第三个参数会导致致命错误,并且您的程序将无法运行。
所以,答案是使用一个变量:
awk 'BEGIN{t = "banana"; sub(/ana/,"anda",t); print t}'
bandana