我正在尝试清理 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