[Shell] awk sub,gsub

sub  只替换每行的第一个匹配字符,或者指定域的第一个匹配字符
gsub会替换当前行的所有匹配字符

[/tmp/test]# more tt1
50 IT                                         China            800 
10 ACCOUNTING                                 LA               1100
20 RESEARCH                                   DALLAS           560
30 SALES                                      CHICAGO          2800
40 OPERATIONS                                 BOSTON           5500
10 DEVELOPER                                  HOSTON           1300

[/tmp/test]# cat tt1 | awk 'sub(0,9)'                     --每行的第一个匹配字符0替换为9
59 IT                                         China            800 
19 ACCOUNTING                                 LA               1100
29 RESEARCH                                   DALLAS           560
39 SALES                                      CHICAGO          2800
49 OPERATIONS                                 BOSTON           5500
19 DEVELOPER                                  HOSTON           1300

[/tmp/test]# cat tt1 | awk 'sub(0,9,$4)'                    --每行的第四列的第一个匹配字符0替换为9
50 IT China 890
10 ACCOUNTING LA 1190
20 RESEARCH DALLAS 569
30 SALES CHICAGO 2890
40 OPERATIONS BOSTON 5590
10 DEVELOPER HOSTON 1390

[/tmp/test]#  cat tt1 | awk 'gsub(0,9)'                           --每行的所有匹配字符0全部替换为9
59 IT                                         China            899 
19 ACCOUNTING                                 LA               1199
29 RESEARCH                                   DALLAS           569
39 SALES                                      CHICAGO          2899
49 OPERATIONS                                 BOSTON           5599
19 DEVELOPER                                  HOSTON           1399


[/tmp/test]# cat tt1 | awk 'sub(1,9)'                                 --不匹配行的时候没有输出,需要加上print $0
90 ACCOUNTING                                 LA               1100
90 DEVELOPER                                  HOSTON           1300
[/tmp/test]# cat tt1 | awk '{sub(1,9);print $0}'
50 IT                                         China            800 
90 ACCOUNTING                                 LA               1100
20 RESEARCH                                   DALLAS           560
30 SALES                                      CHICAGO          2800
40 OPERATIONS                                 BOSTON           5500
90 DEVELOPER                                  HOSTON           1300

[/tmp/test]# cat tt1 | awk '{gsub(1,9);print $0}'
50 IT                                         China            800 
90 ACCOUNTING                                 LA               9900
20 RESEARCH                                   DALLAS           560
30 SALES                                      CHICAGO          2800
40 OPERATIONS                                 BOSTON           5500
90 DEVELOPER                                  HOSTON           9300
请使用浏览器的分享功能分享到微信等