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=
?关于其他文本,请再次检查,这对我来说很好