我使用grep来解析URL的日志文件。该文件由管道符|
分隔。
我想使用grep来提取与某个字符串匹配的所有URL。问题是,我想要整个URL字段。到目前为止,我有以下正则表达式:
grep -oE 'URL\=.*ZJRWYZFTY.*\|' filename
但是,它会抓取ZJRWYZFTY字符串之后的所有内容,包括其他字段。有没有办法捕获URL feild中与ZJRWYZFTY字符串匹配的所有内容?
提前致谢。
答案 0 :(得分:1)
grep
将为.*
进行贪婪的匹配,因此它会捕获所有内容。您可以[^|]*
代替.*
来使其行为符合您的要求。 [^|]
将匹配|
以外的所有字符:
grep -oE 'url\=[^|]*ZJRWYZFTY[^|]*' filename
但似乎awk
是更合适的工具。假设url字段是第二个字段,您可以执行以下操作:
awk -F'|' '$2 ~ /ZJRWYZFTY/ {print $2}" filename