提取2个string之间的文本,直到第一次出现结束string

我正试图提取device_uuid之间的string:和立即,

d

device_uuid:xxx,yyy,ttt device_uuid:2,ppp,hhh 

码:

 $ sed -e 's/device_uuid:\(.*\),/\1/' d xxx,yyyttt 2,ppphhh 

预期o / p:

 xxx 2 

编辑1:

无法使用grep -oP,因为我在AIX上

使用awk失败:

d

 device_uuid:xxx,yyy,ttt ptr,ttt device_uuid:2,ppp,hhh total_uuid:5,jkl,mno device_uuid:9 $ awk -F 'total_uuid:|,' '{print $2}' d yyy ttt ppp 5 

预计在上述情况下o / p:

 blank or device_uuid:xxx,yyy,ttt blank or ptr,ttt blank or device_uuid:2,ppp,hhh 5 blank or device_uuid:9 

device_uuid:不必是第一列,就像明智的一切都可以是随机的,但我需要select该variables对应的值,直到立即分隔符,

– 剪切也失败,因为它只能接受一个字符分隔符。

$ perl -l -ne '/device_uuid:([\w\-]*?)\,/g and print($1)' d

上面的Perl也失败了,因为,如果device_uuid不在一行中,那么该行被删除的o / p,但它应该显示为空白

谢谢。

使用sed

 sed 's/^.*total_uuid:\([^,]*\).*$/\1/' file device_uuid:xxx,yyy,ttt ptr,ttt device_uuid:2,ppp,hhh 5 device_uuid:9 

使用grep -oP

 grep -oP 'device_uuid:\K[^,]+' file xxx 2 

这不是很好,但有几个cut应该做的工作:

 $ echo "device_uuid:xxx,yyy,ttt" | cut -d":" -f2- | cut -d"," -f1 xxx