繁体   English   中英

脚本外壳:grep特定行-提取特定字符串-将它们放在文件中

[英]Script Shell: grep specific lines - extract specific strings - put them on a file

我试图从appache2 accesslog.log文件中重复出现此字符串的行: "GET /kiosk/kioskconf.txt HTTP/1.1"

为此,我使用命令:

grep "GET /kiosk/kioskconf.txt HTTP/1.1"

哪个工作正常。 例如:

19x.25x.22x.5x - - [27/Apr/2015:14:15:50 +0200] "GET /kiosk/kioskconf.txt HTTP/1.1" 

像这样有多行,我想将每行开头的IP提取到文件中。 我也不想在文件中有相同的IP。 我用它来提取IP,但还不完整。

sed -n 's/.*194\([^ ]*\).*/\1/p'

显示:

.25x.22x.5x

但是我不会使用整个IP,也不会为每个不同的IP分配一个实例,并将它们放在文件中。

有人可以帮我排序吗?

听起来您应该使用awk:

awk '/GET \/kiosk\/kioskconf\.txt HTTP\/1\.1/ && !seen[$1]++ { print $1 }' file

这将打印第一个字段$1每当模式匹配,但IP地址是不是已经在数组中seen 它还增加了seen[$1]的值,因此,下一次出现相同的IP时,条件的第二部分将为false,并且将不打印该行。

/. 在正则表达式模式中有特殊含义,因此必须将其转义。

您可以使用sort | uniq sort | uniq命令获取唯一值。

你可以试试

grep "GET /kiosk/kioskconf.txt HTTP/1.1" | cut -f1 | sort -u

这将除去grep输出中除第一个空格分隔的字段(即IP地址)以外的所有内容,然后对其进行排序,从而删除重复项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM