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

看板RegExp (正規表示式 Regular Expression)作者 (Cindy Wang)時間13年前 (2012/01/20 11:58), 編輯推噓2(202)
留言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
grep -Po "\S+$" file 可以嗎?
01/20 14:39, 1F

01/23 21:49, , 2F
利用awk?
01/23 21:49, 2F

01/23 21:56, , 3F
awk ' { print ( $NF ) }'
01/23 21:56, 3F

02/01 07:03, , 4F
用 sed 也可以解 XD sed 's/^.* \(.*$\)/\1/g'
02/01 07:03, 4F
文章代碼(AID): #1F6EPxob (RegExp)
文章代碼(AID): #1F6EPxob (RegExp)