![](/img/trans.png)
[英]how to extract specific lines from file and append it to another existing file in shell script and then delete from original?
[英]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.