我有这个字符串:
XXXX: 150: some texxt: long text
在这种情况下,我只需要获取::
like之间的数字。:150:
echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'
得到我 150: some texxt
如何让它变得懒惰并在第一场比赛中停止
我有这个字符串:
XXXX: 150: some texxt: long text
在这种情况下,我只需要获取::
like之间的数字。:150:
echo "$LINE" |sed -n 's/^.*\XXXX:\(.*\)\:.*/\1/p'
得到我 150: some texxt
如何让它变得懒惰并在第一场比赛中停止
$ 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字符我不确定这是否适用于您的情况,但是此正则表达式将找到 : 字符之间的所有数字。
:\s*(\d+)\s*:
您将在捕获组 1 中找到该编号。
另一种您不需要查看捕获组并简单地使用整个匹配的类似方法是(看起来这个在 Perl 中不起作用):
(?<=:\s*)\d+(?=\s*:)
术语是“非贪婪”:
^.*?\XXXX:\(.*\)\:.*
它是通过添加一个?
之后来实现的.*