grep awk 或 sed 包含网址特定部分的 CSV 行

grep awk 或 sed 包含网址特定部分的 CSV 行

我正在尝试清理 Squid 日志文件,并且想要删除第 11 列中包含“/0/”的网站的行。一个例子:

Row1: column1, column2, column3...column10, ht*p://blah.com/page/230/0/blah0.html
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row3: column1, column2, column3...column10, ht*p://www.yahata.org/things/time/0/yahata.php
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

忽略“http”中的“*”,因为 stackexchange 认为这些是真正的链接。

本质上我想删除第 1 行和第 3 行,但保留第 2 行和第 4 行。我已经尝试了我能找到或想到的每个grep,awk和命令。如果column1中有元素但其他没有,sed我可以删除。grep

答案1

看来你想要/0/最后一列上没有的行,你可以这样做:

grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

例子:

% grep -v '[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

另一方面,如果您恰好想要匹配第 11 列,您可以执行以下操作:

grep -vE '^([^[:blank:]]+[[:blank:]]+){10}[^[:blank:]]*/0/[^[:blank:]]*$' file.txt

示例:匹配第 5 列

% grep -vE '^([^[:blank:]]+[[:blank:]]+){4}[^[:blank:]]*/0/[^[:blank:]]*$' file
Row2: column1, column2, column3...column10, ht*p://narph0.net/page/328/narph.htm
Row4: column1, column2, column3...column10, ht*p://www.the.com/thethat/que303/yeah/main.php

相关内容