Linux Shell脚本在特定单词后打印一定数量的单词

Linux Shell脚本在特定单词后打印一定数量的单词,linux,bash,shell,awk,command-line,Linux,Bash,Shell,Awk,Command Line,我不熟悉shell脚本。我有一个日志文件,我只想grep经过的时间,然后打印数字 日志看起来像这样- Thread:MkdirSUProc workarea:92d70a0a8 cid_working_on:3164187 line:1085 clientIP:10.176.118.170:39575 elapsed time:649 ms additional_info:, Replication info: stack: fs/server/mapserver/create.cc:1085

我不熟悉shell脚本。我有一个日志文件,我只想grep经过的时间,然后打印数字

日志看起来像这样-

Thread:MkdirSUProc workarea:92d70a0a8 cid_working_on:3164187 line:1085 clientIP:10.176.118.170:39575 elapsed time:649 ms additional_info:, Replication info:
stack:  fs/server/mapserver/create.cc:1085
        fs/server/mapserver/locks.cc:108 lkOwner:0x92c38c0a8
Thread:WriteFile workarea:9dbc7c538 cid_working_on:2402759 line:875 clientIP:10.176.118.170:0 elapsed time:17287 ms additional_info:, Replication info:  wa = 0x9dbc816c8
stack:  fs/server/mapserver/write/writev3.cc:875
想要像这样的输出吗-

649
17287
每当我使用grep时,它都会打印整行内容。任何帮助和指导都将不胜感激

您可以使用:

grep -o 'elapsed time:[0-9]*' file | grep -o '[0-9]*'
或者,如果您的grep支持Perl兼容的正则表达式PCRE:

grep -Po 'elapsed time:\K[0-9]+' file
您可以使用:

grep -o 'elapsed time:[0-9]*' file | grep -o '[0-9]*'
或者,如果您的grep支持Perl兼容的正则表达式PCRE:

grep -Po 'elapsed time:\K[0-9]+' file
第一种解决方案:这可以在一个awk中完成,请尝试以下方法

awk 'match($0,/elapsed time:[0-9]+/){print substr($0,RSTART+13,RLENGTH-13)}' Input_file
第二种解决方案:使用字段分隔符尝试:

awk -F'elapsed time:|ms' '$2{print $2}' Input_file
输出如下

649
17287
第一种解决方案:这可以在一个awk中完成,请尝试以下方法

awk 'match($0,/elapsed time:[0-9]+/){print substr($0,RSTART+13,RLENGTH-13)}' Input_file
第二种解决方案:使用字段分隔符尝试:

awk -F'elapsed time:|ms' '$2{print $2}' Input_file
输出如下

649
17287
通常,sed是这些任务的首选

您可以使用:

sed -n 's/.* elapsed time:\([0-9]*\) ms.*/\1/p' file
通常,sed是这些任务的首选

您可以使用:

sed -n 's/.* elapsed time:\([0-9]*\) ms.*/\1/p' file

try grep appeased time | cut-d'-f7 | cut-d':'-f2 try grep appeased time | cut-d'-f7 | cut-d':'-f2在BSD变体上不起作用,但我想,由于这个问题是用linux标记的,所以可以这样做。奇怪的是,如果模式以括号表达式开头,BSD不喜欢*。如果将第二个grep更改为grep-o'[0-9]\+',第一个就可以了。在BSD变体上不起作用,但我想,由于这个问题是用linux标记的,所以这样做是可以的。奇怪的是,如果模式以括号表达式开头,BSD不喜欢*。如果将第二个grep更改为grep-o'[0-9]\+',则第一个选项有效。