馬哥linux分享之Linux三劍客之sed和awk的基本應用

sed、awk和grep被稱爲Linux的三劍客,本文主要講述sed和awk的基本應用,關於grep和正則表達式的應用,請移步本人的另一篇博文,連接爲 http://wangfeng7399.blog.51cto.com/3518031/1360804 
1、sed 
1)sed簡介 
  sed的全稱爲stream editor,sed在處理時一次只讀取文件的一行並對這一行進行處理,而且sed將處理後的數據只會顯示在屏幕上,並不會對原文件進行修改,因此說sed是一個行編輯器 
2)sed的使用格式 
      sed [options] "script" FILE.... 
3)詳解各選項與編輯命令的使用 
    選項: 
     -n:靜默模式,不輸出模式空間內的內容,默認打印空間模式內的內容 
     -r:擴展的正則表達式 
     -f 文件:指定sed腳本文件 
     -i:直接編輯源文件 
    編輯命令 
      d:刪除 
      p:打印 
      i \:在被指定到的行前面插入文本 
      a \:在被指定到的行下面插入文本 
      r 文件路徑:在指定的位置插入另一個文件的內容 
      w 文件路徑:將符合條件的全部行保存至指定的文件中 
      = 顯示符合條件的所在行的行號 
      s@@@:查找條件也可使用模式,可是被替換的內容不能使用模式   
          使用格式: 
              sed '地址定界s@查找條件@替換後的文本@修飾符 
              地址定界:自定義的起始行到結束行,默認爲全文 
                   有三種方式表示 
                      startline,endline 
                        /pat1/,/pat2/ 
                        /pattern/ 
              用法:sed [options] 'addr1[,addr2]編輯命令'FILE... 
                   sed [options] "addr1[,addr2]編輯命令"FILE... 
                  sed在作替換時還支持正則表達式,正則表達式的使用本處不作講解。 
              修飾符: 
                   g:global,全局替換 
                   i:ignore-case,不區分字符大小寫 
4)練習 
1)替換/etc/inittab文件中」id:3:initdefault:"一行中的數字爲5 
    linux

sed 's@\(id:\)[0-9]\(:initdefault\)@\15\2' /etc/inittab


2)刪除/etc/init.d/funcions文件中的空白行 
    正則表達式

sed "/^$/d" /etc/init.d/funcions


3)刪除/etc/inittab文件中位於行首的#; 
    shell

sed 's@^#@@g' /etc/inittab

 
4)刪除/etc/rc.d/rc.sysinit文件中以#後跟至少一個空白字符開頭的行的行首的#和空白字符。 
   數組

sed "s@^#[[:space:]]\{1,\}\@@g" /etc/rc.d/rc.sysinit


5)刪除/boot/grub/grub.conf文件中行首的空白字符。 
  編輯器

 sed "s@^[[:space:]]\{1,\}@@g" /boot/grub/grub.conf


6)取出一個文件路徑的目錄名稱,如/etc/sysconfig/network,其目錄爲/etc/sysconfig,功能相似dirname命令; 
 工具

 echo /etc/sysconfig/network | sed "s@[^/]\{1,\}/\?$@@"


2、awk 
1)簡介 
  awk是一個報告生成工具,旨在把文件中讀取到的每一行的每一個字段分別進行格式化,然後進行顯示,awk支持使用變量、條件判斷、循環、數組 
  如今linux系統上用到的都是gawk 
2)格式: 
  awk [options] 'script'FILE.... 
  awk [options] '/pattern/{action}'FILE... 
3)選項與模式的使用 
   選項 
    -F:指定切割符,默認爲空白 
    $0:整行顯示 
    $1,$2.......:位置參數 
   模式 
      地址定界: 
       /pat1/,/pat2/,表示一個範圍 
       /pattern/,表示被匹配到的行 
       表達式 
       >,>=,<,<=,==,!=,~ 
      BEGIN:表示在執行動做前要作的操做 
      END:表示在動做執行後的操做 
  awk的經常使用四種分隔符: 
      輸入: 
         行分隔符 
         字段分隔符 
      輸出: 
         行分隔符 
         字段分隔符   
    awk的內置變量 
     NF:最後一個字段 
     FS:指定輸入分隔符,在BEGIN中定義,至關於-F,默認爲空白 
     OFS:指定輸出時的分隔符,在BEGIN中定義,默認爲空白 
4)練習 
1.顯示GID小於500的組 

spa

    awk -F : '$3<500{print $1}' /etc/group


2.顯示默認的shell爲nologin的用戶 
    awk -F : '$7~/nologin$/{print $1}' /etc/passwd 
3,顯示eth0網卡文件的配置信息,注意,只顯示等號後面的值 
    awk -F = '{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0 
4.顯示/etc/sysctl。conf文件中定義的內核參數:只顯示名稱, 
    awk -F =' !/^#|^$/{print $1}'/etc/sysctl.conf 
5.顯示eth0網卡的ip地址,經過ifconfig命令結果進行過濾 
   ifconfig eth0 |awk '/inet addr/{print $2}' |awk -F : '{print $2}'
code

相關文章
相關標籤/搜索