89. GAWK/NAWK 字符串函数


这些字符串函数仅在 GAWK 和 NAWK 风格中可用。

语法:

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 代表全局替换。gsubsub 完全相同,只是所有出现的原始字符串都更改为替换字符串。 在以下示例中,"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 函数在输入字符串中搜索给定的字符串(或正则表达式),并在成功匹配时返回正值。

语法:

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