Re: [問題] 如何抓取最後一個欄位的資料?

作者: CindyLinz (Cindy Wang)   2012-01-20 11:58:48
※ 引述《pppty (無)》之銘言:
: /* 聽說註明使用的語言、環境
: * 問題有可能較容易被解決...
: */
: 我是單純使用Linux下的grep
: 要抓取最後一欄的資料..分隔符號是空格
: 但是每一行的欄位並不固定..
: 所以想嘗試用正規表示法抓看看最後一欄
: 看板上說用非貪婪可以比對最少的資料
: 但是不知道我的使用方式是不是有錯
: 或者這種情況不該用正規表示法或者是非貪婪的方法..
: 我的資料內容範例如下:
: //abc/aa/bb/c aa bb cc XXX!
: //abc/aa/bb/d aa YYYY!
: //abc/aa/cc/e ZZ!
: 希望能抓出XXX! YYYY! ZZ!
: #grep -o ' .*?!$' file
: 得到的結果是
: aa bb cc XXX!
: aa YYYY!
: ZZ!
: 感謝
因為你 pattern 裡的空格會先嘗試 match 那一行的第一個空格..
接下來, .*? 雖然說是「非貪婪」,
但它是在有不同的 match 可能時, 才盡可能縮短,
(或說, 它會從最短的開始嘗試),
在你這一個情況下, 因為最後面有 !$,
所以不吃到最長的那種以外, 都不會 match..
.*? 沒有如你所願的原因是,
空格先嘗試 match 第一個空格;
而在空格 match 了第一個空格之後,
恰好只剩一個唯一解, 就是讓 .*? 吃掉剩下全部的字...
你試試看這樣用:
grep -o '[^ ]\+$' file
或是
grep -o '[^ ]\+!$' file
(如果那個驚嘆號也是考慮條件的話)
作者: blackkaku (black)   2012-01-20 14:39:00
grep -Po "\S+$" file 可以嗎?
作者: TTuunngg (aeiou)   2012-01-23 21:49:00
利用awk?awk ' { print ( $NF ) }'
作者: kontracello (Hist. Karma-Ensemble)   2012-02-01 07:03:00
用 sed 也可以解 XD sed 's/^.* \(.*$\)/\1/g'

Links booklink

Contact Us: admin [ a t ] ucptt.com