gensub()函数ide
对于函数
Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes,it
句子,把最后一个:变成空白class
echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gensub (":"," ",4)}'awk
Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129 46471 44 bytes,项目
":"匹配冒号," "把冒号变成空白,4是这一句里面的第4个冒号,若是是g或者G的话,就是全局替换。gensub有4项目,最后一个能够省略,默认省略的是$0,若是写成这样awk '{print gensub (":"," ",4,$0)}',效果相同。di
echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gensub (":"," ",2,$4)}'view
14:36 25vi
这就是以空白为分隔符,对第4个字段(14:36:25)里面,替换第2个冒号为空白。co
echo "aaa bbb" | awk '{print gensub(/(.+) (.+)/,"\\2 \\1","g")}'
bbb aaa
这就完成了替换。
echo "xaax xbx xxx:xaax xbx xxx" | awk -F: -vOFS=":" '{$2=gensub(/x([^x]+)x/,"\\
1YY",2,$2)}1'
xaax xbx xxx:xaax bYY xxx
这个比较复杂。冒号分列,$2对后半操做,2是针对/x([^x]+)x/匹配第二次,()是匹配的b,被\\
1调用,\要写2次,而后赋值给$2,最后的1至关于;print
gsub()函数
echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk 'gsub (":","!",$4)'
Thu Jan 12 14!36!25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes,
和gensub()函数很相近,可是若是按照它的写法,得出的结论却不同
echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk '{print gsub (":","")}'
4
结果是4,等因而返回冒号出现的次数。
另外就是不能处理符号“.”,被当成任义的意思了,要加上两个\\
echo "Thu Jan 12 14:36:25 2017 TCP from 192.168.222.128:9300 to 112.168.222.129:46471 44 bytes," | awk 'gsub ("\\.","")'
Thu Jan 12 14:36:25 2017 TCP from 192168222128:9300 to 112168222129:46471 44 bytes,
sub()函数
echo "11111 22222 44444" | awk 'sub(/22222/,"33333")'
11111 33333 44444
echo "11111 22222 44444 22222" | awk 'sub(22222,33333)'
11111 33333 44444 22222
第二次出现的22222不被替换,只替换第一个。也能够指定域,sub(22222,33333,$0)