从字符串中查找部分文本

时间:2012-06-11 12:26:44

标签: sed awk grep

我的文本文件有几行这样......

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'等待工作_'

3 个答案:

答案 0 :(得分:2)

如果这是你需要的?

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

答案 1 :(得分: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/'

或更简单:

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

答案 2 :(得分:0)

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