我正在尝试抓住最后一个空格,并使用grep在一行上跟随它。
这抓住了我的第一个空间:
echo "toto tata titi" | grep -o " .*$"
在Java中,我会使用非贪婪的运算符,但它似乎不起作用:
echo "toto tata titi" | grep -o " .*?$"
它什么都不返回
预期结果为titi
。
答案 0 :(得分:6)
将.
替换为[^ ]
,echo "toto tata titi" | grep -o " [^ ]*$"
匹配除空格之外的所有内容。然后它可能是贪婪的。
grep
(如果您希望egrep
使用扩展的正则表达式,请使用grep -E
或{{1}}。)
答案 1 :(得分:1)
编辑:我刚刚看到了这篇文章的更好答案,但无论如何都要发布,因为如果你想做一些更复杂的事情,比如替换一些东西,可能会有所帮助。
另一种方法是使用sed
命令并让它替换(在正则表达式中首先使用s
命令)除了你想要的所有东西(它被收集到变量中)括号\1
:
echo "toto tata titi" | sed -r "s/.*( .*?)$/\1/"
答案 2 :(得分:1)
基本上,你所做的只是获取最后一个字段的第一个字符。比正则表达式更易于使用的方法是使用可以将字符串拆分为字段并执行“子字符串”的工具。
$ echo "toto tata titi" | awk '{print substr($NF,0,1)}'
t
$ echo "toto tata titi" | ruby -ane 'puts $F[-1][0]'
t