从日志中打印子字符串

时间:2016-08-05 04:33:52

标签: shell sed grep cut

我有以下格式的日志行:

2016-08-04 19:12:02,537 INFO  ...<Thread-4> - Got a message [......|clientTradeId=xxxxxxx|timeInForce=xxxx|.....TradeResponseMessage]

我需要使用“有消息”关键短语提取所有行;然后打印出生成的候选名单中的'clientTradeId = xxxxxxx'部分。

如何通过脚本实现这一目标(grep和cut? - 或者是否有更好的选择)

2 个答案:

答案 0 :(得分:0)

考虑数据在文件data.log

grep -F "Got a message" data.log | grep -Po "clientTradeId=[^| ]+"

使用剪切

grep -F "Got a message" data.log |  cut -f2 -d'|'

答案 1 :(得分:-1)

更新的命令感谢@BenjaminW:

sed -rn 's/.*(clientTradeId=[0-9]*).*/p' file

没有使用过sed,但是我使用了正则表达式。

查看sed的文档

cat file | sed '/.*(clientTradeId=[0-9]*).*/\1/'

这样做是将文件传输到sed,然后使用正则表达式选择你想要的部分,然后输出它(我希望)。