在 awk 中运行 `sub` 后在哪里获取新字符串

在 awk 中运行 `sub` 后在哪里获取新字符串

来自 awk 编程语言

函数 首先查找 目标字符串中 sub ( r, s , t ) 与正则表达式匹配的最左边的最长子串 ;然后它用替换字符串替换子字符串。 rts

该函数sub(r,s)是 的同义词 sub(r,s,$0)

sub ( /ana/, "anda" , "banana" )例如, 在 中 banana被替换为bandada.

运行后sub ( r, s , t ),如何获取新的字符串?例如,在 中sub ( /ana/, "anda" , "banana" ),如何获取新字符串bandada

sub 函数返回进行替换的次数。

返回的是sub0还是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

相关内容