【发布时间】:2018-03-06 14:08:00
【问题描述】:
我在 apache 访问日志中有以下几行
/sms/receiveHLRLookup?Ported=No&Status=Success&MSISDN=647930229655&blah
/sms/receiveHLRLookup?Ported=No&Status=Success&MSISDN=647930229656&blah
/sms/receiveHLRLookup?Ported=No&Status=Success&MSISDN=647930229657&blah
/sms/receiveHLRLookup?Ported=No&Status=Success&MSISDN=647930229658&blah
我只想提取 MSISDN 值,所以预期的输出是
647930229655
647930229656
647930229657
647930229658
我正在使用以下 sed 命令,但我无法让它在 & 处停止捕获
sed 's/.*MSISDN=\(.*\)/\1/'
【问题讨论】:
-
试试
sed 's/.*MSISDN=\([0-9]*\).*/\1/' -
.*是贪婪的,它会在尝试尊重整个正则表达式的同时尝试尽可能多地匹配......你必须找到一种方法来告诉它需要在 @987654328 之前停止@... 取决于单个/多个字符,您需要不同的方法来处理它.. 甚至是具有 sed 所不具备的功能的工具,例如环视。stackoverflow.com/questions/22937618/… 可能会有所帮助