2014-10-03 42 views
3

我試圖提取device_uuid之間的字符串:和眼前利益,提取文本

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 

預期○在上述情況下/ 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刪除,但應 顯示爲空白

由於。

回答

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 
+0

如何在AIX中使用-oP?它不支持這些選項? – user2711819 2014-10-03 19:59:46

+0

那麼你沒有提到有問題的AIX。無論如何,你可以使用我的awk命令。 – anubhava 2014-10-03 20:00:53

+0

已更新問題 – user2711819 2014-10-03 20:10:03

0

這是不漂亮,但一對夫婦的cut S的關係做的工作:

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

$ echo「device_uuid:xxx,yyy,ttt」| cut -d「device_uuid:」-f2- |剪切-d「,」-f1 evice_uuid:xxx - 我不能單獨分隔: – user2711819 2014-10-03 19:43:28

+0

更新問題 – user2711819 2014-10-03 20:10:31