Re: [問題] 如何抓取最後一個欄位的資料?
看板RegExp (正規表示式 Regular Expression)作者CindyLinz (Cindy Wang)時間13年前 (2012/01/20 11:58)推噓2(2推 0噓 2→)留言4則, 3人參與討論串2/2 (看更多)
※ 引述《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
→
01/20 14:39, , 1F
01/20 14:39, 1F
→
01/23 21:49, , 2F
01/23 21:49, 2F
推
01/23 21:56, , 3F
01/23 21:56, 3F
推
02/01 07:03, , 4F
02/01 07:03, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
RegExp 近期熱門文章
PTT數位生活區 即時熱門文章