0

我有这个字符串:

XXXX:  150: some texxt: long text

在这种情况下,我只需要获取::like之间的数字。:150:

    echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'

得到我 150: some texxt

如何让它变得懒惰并在第一场比赛中停止

4

3 回答 3

0
$ LINE='XXXX:  150: some texxt: long text'

$ echo "$LINE" | sed -r 's@^[^:]+:([^:]+):.*@\1@g'
 150

或者

$ echo "$LINE" | perl -pe 's@.*?:([^:]+):.*@\1@g'
 150

解释

  • [^x]表示:排除x字符
于 2012-11-30T19:21:02.657 回答
0

我不确定这是否适用于您的情况,但是此正则表达式将找到 : 字符之间的所有数字。

:\s*(\d+)\s*:

您将在捕获组 1 中找到该编号。

另一种您不需要查看捕获组并简单地使用整个匹配的类似方法是(看起来这个在 Perl 中不起作用):

(?<=:\s*)\d+(?=\s*:)
于 2012-11-30T20:25:16.063 回答
0

术语是“非贪婪”:

^.*?\XXXX:\(.*\)\:.*

它是通过添加一个?之后来实现的.*

于 2012-11-30T20:28:19.140 回答