正则表达式字符串后跟任何东西并停在|

时间:2013-10-14 04:36:03

标签: regex parsing grep

我使用grep来解析URL的日志文件。该文件由管道符|分隔。

我想使用grep来提取与某个字符串匹配的所有URL。问题是,我想要整个URL字段。到目前为止,我有以下正则表达式:

grep -oE 'URL\=.*ZJRWYZFTY.*\|' filename

但是,它会抓取ZJRWYZFTY字符串之后的所有内容,包括其他字段。有没有办法捕获URL feild中与ZJRWYZFTY字符串匹配的所有内容?

提前致谢。

1 个答案:

答案 0 :(得分:1)

grep将为.*进行贪婪的匹配,因此它会捕获所有内容。您可以[^|]*代替.*来使其行为符合您的要求。 [^|]将匹配|以外的所有字符:

grep -oE 'url\=[^|]*ZJRWYZFTY[^|]*' filename

但似乎awk是更合适的工具。假设url字段是第二个字段,您可以执行以下操作:

awk -F'|' '$2 ~ /ZJRWYZFTY/ {print $2}" filename