使用expr string:regex来剪切字符串

时间:2011-10-18 22:58:32

标签: regex sh

Theres是一个长字符串,包含以空格分隔的单词,其中一个以$ somevar结尾。 简单版本是(x是$ somevar):

expr "abc aac bbcx" : '.*\([^ ]\+x\).*'

问题是,它只返回“cx”。它应该返回“bbcx”。这有什么不对吗?

3 个答案:

答案 0 :(得分:1)

。*贪婪 - 它尽可能多地匹配字符。将其更改为。*?尽可能少地匹配:

.*?([^ ]+x).*?

答案 1 :(得分:0)

您可以尝试以下正则表达式:[^\s]+x\b

答案 2 :(得分:0)

kent$  echo "abc aac bbcx"|grep -Po "[^\s]+(?=x)"                                                                                        
bbc

如果你也需要'x':你提到了

  

其中一个结束与$ somevar

kent$  echo "abc aac bbcx"|grep -Po "[^\s]+x(?=\s|$)"
bbcx

kent$  echo "abc aacx bbc"|grep -Po "[^\s]+x(?=\s|$)"
aacx