作者pppty (無)
看板RegExp
標題[問題] 如何抓取最後一個欄位的資料?
時間Fri Jan 20 11:17:00 2012
/*
聽說註明使用的語言、環境
*
問題有可能較容易被解決...
*/
我是單純使用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!
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.87.142.18
> -------------------------------------------------------------------------- <
作者: CindyLinz (Cindy Wang) 看板: RegExp
標題: Re: [問題] 如何抓取最後一個欄位的資料?
時間: Fri Jan 20 11:58:48 2012
※ 引述《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
(如果那個驚嘆號也是考慮條件的話)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 210.242.246.249
→ blackkaku:grep -Po "\S+$" file 可以嗎? 01/20 14:39
→ TTuunngg:利用awk? 01/23 21:49
推 TTuunngg:awk ' { print ( $NF ) }' 01/23 21:56
推 kontracello:用 sed 也可以解 XD sed 's/^.* \(.*$\)/\1/g' 02/01 07:03