字符串的正则表达式,后跟任何内容并停止于 |

标签 regex parsing grep

我正在使用 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/

相关文章:

javascript - 在字符串中转义 RegExp.lastMatch ($&)

javascript - 如何在没有可选查询字符串参数的情况下从 URL 获取路径或 slug

java - CYK算法实现java

c# - C#中的双重解析算法

php - 如何使用 perl/php/grep/etc 从 csv 中提取日期范围?

正则表达式字符恰好出现 x 次

ruby-on-rails - 使用正则表达式数组转换 Ruby w/`gsub` 中的字符串

c++ - 如何检查哪个匹配组被用来匹配(boost-regex)

linux - 使用正则表达式用 sed 删除第一行

linux - 在 bash 中对多行运行统计