Re: [问题] 如何抓取最后一个字段的资料?

楼主: CindyLinz (Cindy Wang)   2012-01-20 11:58:48
※ 引述《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
(如果那个惊叹号也是考虑条件的话)
作者: blackkaku (black)   2012-01-20 14:39:00
grep -Po "\S+$" file 可以吗?
作者: TTuunngg (aeiou)   2012-01-23 21:49:00
利用awk?awk ' { print ( $NF ) }'
作者: kontracello (Hist. Karma-Ensemble)   2012-02-01 07:03:00
用 sed 也可以解 XD sed 's/^.* \(.*$\)/\1/g'

Links booklink

Contact Us: admin [ a t ] ucptt.com