我的文本文件有几行这样......
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'等待工作_'
答案 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