我正在使用 grep 来解析日志文件中的 URL。文件由管道字符 |
分隔。
我想使用 grep 来提取与某个字符串匹配的所有 URL。问题是,我想要整个 URL 字段。到目前为止,我有以下正则表达式:
grep -oE 'URL\=.*ZJRWYZFTY.*\|' filename
但是,它会获取 ZJRWYZFTY 字符串之后的所有内容,包括其他字段。有没有办法捕获 URL 字段中与 ZJRWYZFTY 字符串匹配的所有内容,直到 | ?
提前致谢。
最佳答案
grep
将对 .*
进行贪婪匹配,因此它捕获所有内容。您可以使用 [^|]*
而不是 .*
来使其表现得像您想要的那样。 [^|]
将匹配除 |
之外的所有字符:
grep -oE 'url\=[^|]*ZJRWYZFTY[^|]*' 文件名
但似乎 awk
是更合适的工具。假设 url 字段是第二个字段,您可以这样做:
awk -F'|' '$2 ~/ZJRWYZFTY/{print $2}"文件名
关于字符串的正则表达式,后跟任何内容并停止于 |,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353594/