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)