不确定由谁来表达这个问题
这是示例行。
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_pa_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
哪些似乎不起作用,是否可以删除重复项并将其作为相同命令的一部分?
答案 0 :(得分:0)
您可以尝试使用awk
awk -F'[?&]' '{print $2}' somewebsite.access.log.2.csv|sort -u > clean.txt
如果attribute_pa_color
是URL上的第一个参数,这将起作用
如果您只想提取文本attribute_pa_color=
,则可以尝试以下操作:
awk -F'[?&]' '{print $2}' somewebsite.access.log.2.csv|awk -F\= '{print $1"="}'|sort -u > clean.txt
您可以尝试使用类似以下的方法来代替第二个awk
:
awk -F'[?&]' '{split($2,a,=);print a[1]}' somewebsite.access.log.2.csv|sort -u > clean.txt
使用awk
作为分隔符在=
中内部分割