linux awk之gensub()函數詳解

gensub確實不一樣於sub和gsub這2個工具,它有它更獨特的魅力,下面我經過幾個例子給你們講解它的實際用法和獨到之處。
  1. echo "11111"| awk 'BEGIN{FS=OFS=""}{$4="x";print}'
    linux

  2. 111x1ide

[解析] 這個時候閣下是否是看這段沒有字段分割符的文本已經感到無從下手了?呵呵,通過這一系列的FS、OFS設置咱們終於達到了目的,是否是很麻煩?咱們再看看下面的例子。  
  1. echo "11111"| awk '{print $0=gensub("1","x",4)}'
    工具

  2. 111x1
    spa


  3. echo "11111"| awk '{print $0=gensub("1","x","g")}'
    unix

  4. xxxxx字符串

[解析]get

閣下是否是豁然開朗了不少?這就是gensub的便捷,在這裏面再也不須要字段分割符,用數字便可指定你要替換的某一位。g和G是指全局替換,要雙引號標記起來。特別注意的是gensub是不會修改原記錄的,因此要對$0進行一個賦值。「themodified string is returned as the result of the function and theoriginal target string is not changed」。接下來咱們再看看一個更復雜的運用。string


  1. echo "unix linux"| awk '{print gensub(/(.+)(.+)/,"\\2\\1","g")}'
    it

  2. linux unix
    io


  3. echo "xaax xbx xxx:xaax xbxxxx"| awk -F:-vOFS=":"'{$2=gensub(/x([^x]+)x/,"\\1YY",2,$2)}1'

  4. xaax xbx xxx:xaax bYYxxx





截取字符串:

echo "f<a>gaga<a>50000</a>4515gaga"| awk '{print gensub(".*<a>([0-9]+).*","\\1","1")}'

echo "f<a>gaga<a>50000</a>gaga"| sed -r 's/.*<a>([0-9]+).*/\1/g'

echo "f<a>gaga<a>50000</a>gaga"| grep -ioE "([0-9]+)"

相關文章
相關標籤/搜索