grep-o搜索在第二个表达式的第一个实例停止,而不是最后一个?贪婪?

grep-o搜索在第二个表达式的第一个实例停止,而不是最后一个?贪婪?,grep,Grep,我不知道该由谁来回答这个问题 这是一个示例行 30/Oct/2019:00:17:22 +0000|v1|177.95.140.78|www.somewebsite.com|200|162512|-|-|0.000|GET /product/short-velvet-cloak-with-hood/?attribute_pa_color=dark-blue&attribute_pa_accent-color=gold&attribute_pa_size=small HTTP/1

我不知道该由谁来回答这个问题

这是一个示例行

30/Oct/2019:00:17:22 +0000|v1|177.95.140.78|www.somewebsite.com|200|162512|-|-|0.000|GET /product/short-velvet-cloak-with-hood/?attribute_pa_color=dark-blue&attribute_pa_accent-color=gold&attribute_pa_size=small  HTTP/1.0|0|0|-
我需要提取
attribute\u pa\u color=

所以我有

cat somewebsite.access.log.2.csv | grep -o "?.*=" > just-parameters.txt
如果URL中有多个参数,则返回所有参数

因此,与其在“=”的第一个实例处停止匹配,不如在行中取“=”的最后一个实例

我怎样才能让它一开始就停下来

我试过这个

cat somewebsite.access.log.2.csv | grep -o "?(.*?)=" > just-parameters2.txt

cat somewebsite.access.log.2.csv | grep -o "\?(.*?)=" > just-parameters2.txt
两者都没有回报

我还需要每个唯一的参数,所以一旦我创建了文件,我就运行它

sort just-parameters.txt | uniq > clean.txt

这似乎不起作用,是否可以删除重复项并使其成为同一命令的一部分?

您可以尝试类似于
awk

awk -F'[?&]' '{print $2}' somewebsite.access.log.2.csv|sort -u > clean.txt
如果
attribute\u pa\u color
是URL上的第一个参数,那么这将起作用

如果只想提取文本
attribute\u pa\u color=
,可以尝试以下方法:

awk -F'[?&]' '{print $2}' somewebsite.access.log.2.csv|awk -F\= '{print $1"="}'|sort -u > clean.txt
awk -F'[?&]' '{split($2,a,=);print a[1]}' somewebsite.access.log.2.csv|sort -u > clean.txt
您可以尝试以下方法,而不是使用第二种
awk

awk -F'[?&]' '{print $2}' somewebsite.access.log.2.csv|awk -F\= '{print $1"="}'|sort -u > clean.txt
awk -F'[?&]' '{split($2,a,=);print a[1]}' somewebsite.access.log.2.csv|sort -u > clean.txt

awk
中使用
=
作为分隔符进行内部拆分

这可能可行,但它正在打印“HTTP/1.0 | 0 | 0 |-”,并且它正在打印第一个参数及其值,这可能是因为我没有清楚地将我的问题排出来[code]attribute\u pa\u color=深绿色搭配黑色attribute\u pa\u color=深绿色搭配波尔多attribute\u pa\u color=深灰色HTTP/1.0 | 0 | 0 |-attribute\u color=深灰色HTTP/1.0 | 1 | 0 |-attribute\u pa\u color=深红色[/code]我需要的只是attribute u pa\u color,所以您只需要提取字符串
attribute u\pa\u color=
?关于其他文本,请再次检查,这对我来说很好