bash - 如何打印文件的每一行,同时将第 n 列添加到行的前面以构造 apf ban 命令
问题描述
重击 4.4.0
Ubuntu 16.04
如何打印文件的每一行,同时将第 n 列添加到行的前面以构造apf
禁止命令。
这是我的名为 .syncflood-violations.log 的源文件:
[Thu Nov 14 17:08:19 2019] SRC=178.128.184.16 DST=XXX.XXX.XXX.XXX SPT=57858 DPT=80
[Mon Nov 18 19:29:42 2019] SRC=83.248.31.89 DST=XXX.XXX.XXX.XXX SPT=54667 DPT=40033
[Tue Nov 19 14:45:11 2019] SRC=47.92.201.62 DST=XXX.XXX.XXX.XXX SPT=50322 DPT=80
[Wed Nov 20 14:30:02 2019] SRC=104.152.52.32 DST=XXX.XXX.XXX.XXX SPT=56417 DPT=5938
[Mon Nov 25 05:20:42 2019] SRC=92.246.84.85 DST=XXX.XXX.XXX.XXX SPT=45576 DPT=80
这是我的一些脚本:
dmesg -T | grep -- 'INSYN_SRC_LIMIT' | awk '{ print $1,$2,$3,$4,$5,$11,$12,$19,$20,$21 }' | sed -e 's/PROTO=TCP//g; s/WINDOW.*//g' | column -t | awk '!seen[$6]++' >> .syncflood-violations.log;
sleep .5;
while read -r line; do
Banip="$(awk '{ print $6 }' | sed -e 's/SRC=//g')"
#echo "/usr/local/sbin/apf -d $Banip \"$line\"" >> banthem.sh
echo "/usr/local/sbin/apf -d $(awk '{ print $6 }') \"$line\"" >> banthem.sh
done<.syncflood-violations.log
我的回声线不成功。
这是我想要的结果:
/usr/local/sbin/apf -d 58.180.101.13 "[Sat Nov 2 09:36:24 2019] SRC=58.180.101.13 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
/usr/local/sbin/apf -d 178.128.184.16 "[Sat Nov 2 09:36:24 2019] SRC=178.128.184.16 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
/usr/local/sbin/apf -d 83.248.31.89 "[Sat Nov 2 09:36:24 2019] SRC=83.248.31.89 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
/usr/local/sbin/apf -d 58.180.101.13 "[Sat Nov 2 09:36:24 2019] SRC=58.180.101.13 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
/usr/local/sbin/apf -d 58.180.101.13 "[Sat Nov 2 09:36:24 2019] SRC=58.180.101.13 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
/usr/local/sbin/apf -d 58.180.101.13 "[Sat Nov 2 09:36:24 2019] SRC=58.180.101.13 DST=XXX.XXX.XXX.XXX SPT=34345 DPT=80"
解决方案
这可以单独完成awk
,您能否尝试以下操作(使用所示示例编写和测试);您可以使用.syncflood-violations.log
文件作为此代码的输入)。
awk -v s1="\"" '
match($0,/SRC[^ ]*/){
print "/usr/local/sbin/apf -d " substr($0,RSTART+4,RLENGTH-1) s1 substr($0,1,RSTART-1) substr($0,RSTART+RLENGTH) s1
}
' Input_file
推荐阅读
- electron - 有没有办法在 Electron 应用程序包根目录中复制或创建文件夹?
- java - Springdoc 将安全性指定为打开
- java - 如何使用 bufferedreader 捕获 csv 文件中的字段值
- javascript - 如何使用现代 FileApi 在本地 fs 中创建文件?
- xamarin - Xamarin 在 Andriod 设备上使用黑色背景和白色二维码形成 Zxing 扫描问题
- linux - 根据命令行中同一行中的单词的条件更改另一个单词?
- c# - C#:Random.NextDouble 方法停止应用程序
- locking - 在 Marklogic 中的指定时间释放所有文档锁
- database - 使用数据库扩展服务
- python - 如何使用 requests 模块下载 csv 文件