Theres是一个长字符串,包含以空格分隔的单词,其中一个以$ somevar结尾。 简单版本是(x是$ somevar):
expr "abc aac bbcx" : '.*\([^ ]\+x\).*'
问题是,它只返回“cx”。它应该返回“bbcx”。这有什么不对吗?
答案 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