我有一个包含多个字符串的大日志文件,并且尝试获取ClOrdID字段,例如:
ClOrdID="123456"
ClOrdID="123654"
(...)
在此文件的中间,我有带有以下消息的字符串:
$$ grep -i "Message processing FAILED" mylog | head -1
2020-10-02 09:30:00,622 ERROR [LAWT1] etc... etc... - Message processing FAILED: <NewOrderSingle etc.. MsgType="D" ClOrdID="123456" Rule80A="A" etc.../></NewOrderSingle>
我意识到,如果我使用“ grep -o”,我可以得到我想要的:
$$ grep -i "Message processing FAILED" mylog | grep -o '\sClOrdID=\".[^.\"]*\"' | sed 's/ //g' | head -1
ClOrdID="123456"
但是,如果我尝试使用sed,它将无法正常工作。它打印ClOrdID及其后的所有其他内容(除了结尾部分... NewOrderSingle>):
$$ grep -i "Message processing FAILED" mylog | sed -rn 's/.* (ClOrdID=".*)" .*/\1/p' | head -1
ClOrdID="123456" Rule80A="A" etc...
有人可以帮助我找出sed命令出了什么问题吗?我正在尝试更加熟悉sed。
您可能可以使用sed
使用否定的字符类[^"]*
而不是贪婪的字符集.*
。[^"]
匹配所有非字符,"
但.
匹配任何字符,".*"
并将匹配直到"
输入的最后一个字符。
sed -rn 's/.* (ClOrdID="[^"]*") .*/\1/p'
另外,您必须继续关闭:
捕获组内部。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句