仅在2个字符串之间提取文本,直到第一次出现结束字符串

时间:2014-10-03 19:23:46

标签: linux perl shell aix

我正在尝试在device_uuid:和immediate,

之间提取字符串

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:

不能像我在AIX上那样使用grep -oP

使用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:不需要是第一列,就像明智的一样可以随机但我需要选择相应的变量,直到直接分隔符,

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

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

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

感谢。

2 个答案:

答案 0 :(得分:1)

使用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

答案 1 :(得分:0)

它不漂亮,但有几个cut应该可以完成这项任务:

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