我是 bash 的新手,正在尝试了解它。
我有以下内容:
Sep 18 21:05:40 host kernel: Firewall: *Port Flood* IN=venet0 OUT= MAC= SRC=118.223.69.254 DST=10.0.0.1 LEN=40 TOS=0x00 PREC=0x00 TTL=244 ID=9398 PROTO=TCP SPT=9876 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
如何提取 SRC IP 并将其通过管道传输到 csf -d {IP HERE}
我会用类似的东西
sed -e 's/\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\) .*$/\1/'/var/log/messages
对吗?
编辑:
因为 SPT=
是所有名称,我可以提取它并获取 IP 吗?
最佳答案
像下面这样的东西应该可以工作:
sed -n 's/.*SRC=\([.0-9]*\).*/\1/p' /var/log/messages | xargs csf -d
xargs
会将来自标准输入的参数附加到命令中。请注意,我的正则表达式匹配 IP 地址前后带有 .*
的整行,因此当您进行替换时,剩下的就是 IP。
通过使用 -n
选项并将 p
添加到 sed 替换的末尾,只会打印与正则表达式匹配的行。
关于linux - Bash Grep 和发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12481792/