Sed 从字符串中查找部分文本

Sed 从字符串中查找部分文本,sed,awk,grep,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,但是

我的文本文件中有几行是这样的

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“等待作业”

如果这是您需要的

kent$  echo "some data here Waiting on job_bba6b2a1589b4535a804e7877dc1fe11 ... (409s)"|grep -oP "(?<=Waiting on job_)[^ ]*" 
bba6b2a1589b4535a804e7877dc1fe11
kent$echo“这里的一些数据正在等待作业”bba6b2a1589b4535a804e7877dc1fe11…(409s)“| grep-oP”(?)?
对于包含
等待作业
的每一行,后跟0个或更多非空格字符,这将替换整行(因为开始和结束
*
将贪婪地使用尽可能多的字符),使用back reference
\1
调用
之间匹配的所有内容\(
\)
,即您要查找的非空格字符
[^]*

因此:

或更简单:

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

perl-lne'如果m/(?+1-则打印$1,用于支持PCRE的
grep
版本,如GNU和OS X。
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/'
perl -lne 'print $1 if m/(?<=Waiting on job_)([^ ]*)/' inputfile