作者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
1F:→ blackkaku:grep -Po "\S+$" file 可以吗? 01/20 14:39
2F:→ TTuunngg:利用awk? 01/23 21:49
3F:推 TTuunngg:awk ' { print ( $NF ) }' 01/23 21:56
4F:推 kontracello:用 sed 也可以解 XD sed 's/^.* \(.*$\)/\1/g' 02/01 07:03