精華區beta RegExp 關於我們 聯絡資訊
/* 聽說註明使用的語言、環境 * 問題有可能較容易被解決... */ 我是單純使用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