2012-06-11 46 views
1

我的文本文件有幾行這樣的...發現部分文本字符串中

some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s) Current status: DONE 
some data there Waiting on job_xyz ... (240s) Current status: DONE 

我需要找到作業ID。在上面提到的例子中...

bba6b2a1589b4535a804e7877dc1fe11 
xyz 

我可以使用grep,但是如何只選擇ID?

cat file.log | grep'Waiting on job_'

回答

2

如果這是您所需要的?

kent$ echo "some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s)"|grep -oP "(?<=Waiting on job_)[^ ]*" 
bba6b2a1589b4535a804e7877dc1fe11 
+0

+1 - 爲支持PCRE如GNU和OS X. grep'的'版本 –

1
sed 's/.*Waiting on job_\([^ ]*\).*/\1/' 

對於含有Waiting on job_後跟0或多個非空格字符的每一行,這將替代整個線(因爲開始和結束.*要貪婪地採取儘可能多的字符可能)使用回參考\1召回所有在\(\)之間匹配的數據,即您要查找的非空格字符[^ ]*

所以:

cat file.log | grep 'Waiting on job_' | sed 's/.*Waiting on job_\([^ ]*\).*/\1/' 

或簡單:

0
perl -lne 'print $1 if m/(?<=Waiting on job_)([^ ]*)/' inputfile 
相關問題