89. GAWK/NAWK 字符串函数
sub()
语法:
sub(original-string,replacement-string,string-variable)
sub 代表替换。
original-string:这是需要替换的原始字符串。 这也可以是正则表达式。replacement-string:这是替换字符串。string-variablev:它充当输入和输出字符串变量。您必须小心这一点,因为成功替换后,您会丢失该字符串变量中的原始值。
在以下示例中:
original-string:这是正则表达式C[Aa],它匹配"CA"或"Ca"replacement-string:当找到原始字符串时,将其替换为"KA"string-variable:在执行sub之前,变量包含输入字符串。替换完成后,变量将包含输出字符串。请注意,sub仅替换第一次出现的匹配项。
$ cat sub.awk
BEGIN {
state="CA is California"
sub("C[Aa]","KA",state);
print state;
}
$ awk -f sub.awk
KA is California
第三个参数字符串变量是可选的。当未指定时,awk 将使用
$0
(当前行),如下所示。
此示例将记录的前 2 个字符从 "10" 更改为“ ``“20”```。因此,项目编号 101 变为 201,102 变为 202,依此类推。
$ awk '{ sub("10","20"); print $0; }' items.txt
201,HD Camcorder,Video,210,10
202,Refrigerator,Appliance,850,2
203,MP3 Player,Audio,270,15
204,Tennis Racket,Sports,190,20
205,Laser Printer,Office,475,5
当替换成功时,sub 函数返回 1,否则返回 0。
仅当替换成功时才打印记录:
$ awk '{ if (sub("HD","High-Def")) print $0; }' items.txt
101,High-Def Camcorder,Video,210,10
gsub()
gsub 代表全局替换。gsub 与 sub 完全相同,只是所有出现的原始字符串都更改为替换字符串。
在以下示例中,"CA" 和 "Ca" 均更改为 "KA":
$ cat gsub.awk
BEGIN {
state="CA is California"
gsub("C[Aa]","KA",state);
print state;
}
$ awk -f gsub.awk
KA is KAlifornia
与 sub 一样,第三个参数是可选的。 当未指定时,awk 将使用
$0
,如下所示。
以下示例将行中所有出现的 "10" 替换为 "20"。 因此,除了更改项目编号之外,如果记录中包含 ```“10”``,它还会更改记录中的其他数字字段。
$ awk '{ gsub("10","20"); print $0; }' items.txt
201,HD Camcorder,Video,220,20
202,Refrigerator,Appliance,850,2
203,MP3 Player,Audio,270,15
204,Tennis Racket,Sports,190,20
205,Laser Printer,Office,475,5
match() 和 RSTART、RLENGTH 变量
match 函数在输入字符串中搜索给定的字符串(或正则表达式),并在成功匹配时返回正值。
语法:
match(input-string,search-string)
input-string:这是需要搜索的输入字符串。search-string:这是搜索字符串,需要在输入字符串中搜索。 这也可以是正则表达式。
以下示例在状态字符串变量中搜索字符串 "Cali"。如果存在,它会打印一条成功消息。
$ cat match.awk
BEGIN {
state="CA is California"
if (match(state,"Cali")) {
print substr(state,RSTART,RLENGTH),"is present in:",state;
}
}
$ awk -f match.awk
Cali is present in: CA is California
匹配设置以下两个特殊变量。上面的示例在子字符串函数调用中使用这些,以打印成功消息中的模式。
RSTART- 搜索字符串的起始位置。RLENGTH- 搜索字符串的长度。