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