注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

伯纳乌の夢

可以挽回么?我们按“ Ctrl+Z”撤销掉吧。对不起啦~~

 
 
 

日志

 
 
 
 

cut, grep  

2008-11-23 17:46:25|  分类: Ubuntu |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
擷取命令: cut, grep
什麼是擷取命令啊?說穿了,就是將一段資料經過分析後,取出我們所想要的。 或者是,經由分析關鍵字,取得我們所想要的那一行! 不過,要注意的是,一般來說,擷取訊息通常是針對『一行一行』來分析的, 並不是整篇訊息分析的喔~底下我們介紹兩個很常用的訊息擷取命令:


  • cut
  • cut 不就是『切』嗎?沒錯啦!這個指令可以將一段訊息的某一段給他『切』出來~ 處理的訊息是以『行』為單位喔!底下我們就來談一談:
    [root@linux ~]# cut -d'分隔字元' -f fields
    [root@linux ~]# cut -c 字元區間
    參數:
    -d :後面接分隔字元。與 -f 一起使用;
    -f :依據 -d 的分隔字元將一段訊息分割成為數段,用 -f 取出第幾段的意思;
    -c :以字元 (characters) 的單位取出固定字元區間;
    範例:


    範例一:將 PATH 變數取出,我要找出第五個路徑。
    [root@linux ~]# echo $PATH
    /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games:
    [root@linux ~]# echo $PATH | cut -d ':' -f 5
    # 嘿嘿!如此一來,就會出現 /usr/local/bin 這個目錄名稱!
    # 因為我們是以 : 作為分隔符號,第五個就是 /usr/local/bin 啊!
    # 那麼如果想要列出第 3 與第 5 呢?,就是這樣:

    [root@linux ~]# echo $PATH | cut -d ':' -f 3,5

    範例二:將 export 輸出的訊息,取得第 12 字元以後的所有字串
    [root@linux ~]# export
    declare -x HISTSIZE="1000"
    declare -x INPUTRC="/etc/inputrc"
    declare -x KDEDIR="/usr"
    declare -x LANG="zh_TW.big5"
    ......其他省略......
    [root@linux ~]# export | cut -c 12-
    HISTSIZE="1000"
    INPUTRC="/etc/inputrc"
    KDEDIR="/usr"
    LANG="zh_TW.big5"
    ......其他省略......
    # 知道怎麼回事了吧?用 -c 可以處理比較具有格式的輸出資料!
    # 我們還可以指定某個範圍的值,例如第 12-20 的字元,就是 cut -c 12-20 等等!


    範例三:用 last 將這個月登入者的資訊中,僅留下使用者大名
    [root@linux ~]# last
    vbird tty1 192.168.1.28 Mon Aug 15 11:55 - 17:48 (05:53)
    vbird tty1 192.168.1.28 Mon Aug 15 10:17 - 11:54 (01:37)
    [root@linux ~]# last | cut -d ' ' -f 1
    # 用 last 可以取得最近一個月登入主機的使用者資訊,
    # 而我們可以利用空白字元的間隔,取出第一個資訊,就是使用者帳號囉!
    # 但是因為 vbird tty1 之間空格有好幾個,並非僅有一個,所以,如果要找出
    # tty1 其實不能以 cut -d ' ' -f 1,2 喔!輸出的結果會不是我們想要的。

    這個 cut 實在很好用!不過,說真的,除非你常常在分析 log 檔案,否則使用到 cut 的機會並不多!好了! cut 主要的用途在於將『同一行裡面的資料進行分解!』, 最常使用在分析一些數據或文字資料的時候!這是因為有時候我們會以某些字元當作分割的參數, 然後來將資料加以切割,以取得我們所需要的資料。我也很常使用這個功能呢!尤其是在分析 log 檔案的時候!不過, cut 在處理多空格相連的資料時,可能會比較吃力一點~


  • grep
  • 剛剛的 cut 是將一行訊息當中,取出某部分我們想要的,而 grep 則是分析一行訊息, 若當中有我們所需要的資訊,就將該行拿出來~簡單的語法是這樣的:
    [root@linux ~]# grep [-acinv] '搜尋字串' filename
    參數:
    -a :將 binary 檔案以 text 檔案的方式搜尋資料
    -c :計算找到 '搜尋字串' 的次數
    -i :忽略大小寫的不同,所以大小寫視為相同
    -n :順便輸出行號
    -v :反向選擇,亦即顯示出沒有 '搜尋字串' 內容的那一行!
    範例:


    範例一:將 last 當中,有出現 root 的那一行就取出來;
    [root@linux ~]# last | grep 'root'

    範例二:與範例一相反,只要沒有 root 的就取出!
    [root@linux ~]# last | grep -v 'root'

    範例三:在 last 的輸出訊息中,只要有 root 就取出,並且僅取第一欄
    [root@linux ~]# last | grep 'root' |cut -d ' ' -f1
    # 在取出 root 之後,利用上個指令 cut 的處理,就能夠僅取得第一欄囉!
    grep 是個很棒的指令喔!他支援的語法實在是太多了~用在正規表示法裡頭, 能夠處理的資料實在是多的很~不過,我們這裡先不談正規表示法~下一章再來說明~ 您先瞭解一下, grep 可以解析一行文字,取得關鍵字,若該行有存在關鍵字, 就會整行列出來!
      评论这张
     
    阅读(122)| 评论(0)
    推荐 转载

    历史上的今天

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2018