awk

Sub 函数

语法:

sub(original-string,replacement-string,string-variable)

1. sub 代表substitution.

2. original-string: 这是原字符串需要被替换的. 可以是正则表达式.

3. replacement-string: 这是替换字符串.

4. string-variable: 这作为输入和输出字符串变量。你必须要小心,因为成功的替换后,你失去了在这个字符串变量的原始值。

在下面的例子里:

1. original-string:这是正则表达式C[Aa],它可以匹配到"CA" or "Ca".

2. replacement-string: 当原字符串被发现, 用 "KA"替换它。

3. 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

第三个参数string-variavle是可选的。如果不指定,awk将使用$0(当前行),如下所示,这个例子替换记录开始2个字符从10到20。因此,项目编号101变成201,102变202,等等。

$ cat items.txt
101,HD Camcorder,Video,210,10
102,Refrigerator,Appliance,850,2
103,MP3 Player,Audio,270,15
104,Tennis Racket,Sports,190,20
105,Laser Printer,Office,475,5

$ 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