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
- 搜索字符串的长度。