我无法从log4j文件中提取匹配的字符串:OPER ^。 我可以从日志文件中的两个不同来源获取此值:
2012-01-26 03:06:45,428 INFO [NP_OSS] OSSBSSGWIMPL6000|**OPR20120126120537008893**|GenServiceDeactivationResponse :: processRequestGenServiceDeactivationResponse() ::
或:
2012-01-26 03:06:45,411 INFO [NP_OSS] MESSAGE_DATA = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:ServiceDeactivationResponse xmlns:ns2="urn:ngn:foo"><MessageHeader><MessageTimeStamp>20120126031123</MessageTimeStamp>**<OperatorTrxID>OPR20120126120537008893</OperatorTrxID>**</MessageHeader></ns2:ServiceDeactivationResponse>
我只需提取值 OPR * 我猜它更容易从第一个中提取它,因为它不涉及解析xml。
非常感谢您的帮助!
答案 0 :(得分:5)
也许我不太了解OP的问题,为什么一个简单的grep命令无法完成这项工作?
像
grep -Po 'OPR\d+'
两行的输出相同:
OPR20120126120537008893
答案 1 :(得分:2)
$ echo $line | grep OPR | sed -e "s/^.*OPR\([0-9]*\).*$/\1/"
修改强>
阅读评论后:
$ echo $line | grep OPR | sed -e "s/^.*\(OPR[0-9]*\).*$/\1/" | head -1
答案 2 :(得分:2)
awk
:设置字段分隔符
awk -v FS="[<>]" '{print $13}' logfile
perl
:使用正向前看并向后看
perl -pne 's/.*(?<=\<OperatorTrxID\>)([A-Z0-9]+)(?=\<\/OperatorTrxID\>).*/$1/' logfile
[jaypal:~/Temp] cat logfile
2012-01-26 03:06:45,411 INFO [NP_OSS] MESSAGE_DATA = <?xml version="1.0" encoding="UTF-8" standalone="yes"?><ns2:ServiceDeactivationResponse xmlns:ns2="urn:ngn:foo"><MessageHeader><MessageTimeStamp>20120126031123</MessageTimeStamp><OperatorTrxID>OPR20120126120537008893</OperatorTrxID></MessageHeader></ns2:ServiceDeactivationResponse>
[jaypal:~/Temp] awk -v FS="[<>]" '{print $13}' logfile
OPR20120126120537008893
[jaypal:~/Temp] perl -pne 's/.*(?<=\<OperatorTrxID\>)([A-Z0-9]+)(?=\<\/OperatorTrxID\>).*/$1/' logfile
OPR20120126120537008893