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?

猫文件.log | grep '等待工作_'

4

3 回答 3

2

如果这是你需要的?

kent$  echo "some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s)"|grep -oP "(?<=Waiting on job_)[^ ]*" 
bba6b2a1589b4535a804e7877dc1fe11
于 2012-06-11T12:36:04.950 回答
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/'
于 2012-06-11T13:32:02.710 回答
0
perl -lne 'print $1 if m/(?<=Waiting on job_)([^ ]*)/' inputfile
于 2012-06-11T16:53:30.313 回答