我有一个输出文件,其数据为:
-> Added to botcc.rules (2)
alert tcp any any -> any any (msg:"testing rule 1";sid:1323;rev:1;)
alert tcp any any -> any any (msg:"testing rule 2";sid:1323;rev:1;)
-> Added to compromised.rules (1)
alert tcp any any -> any any (msg:"testing rule for comp";sid:1323;rev:1;)
我需要shell脚本,它应该将上述输出拆分为不同的子文件,其名称为botcc.rules
,compromised.rules
具有各自的规则(数据以下)。
答案 0 :(得分:0)
使用强大的awk
语言的解决方案:
我们会在每次出现模式> Added to
时将输入文件拆分为多个文件。但是包含该模式的行不应该在新文件中。
awk '/> Added to/{ x=$4;next }{ print > x }' inputfile
此命令包含2组花括号:
只有在遇到包含模式> Added to
的行时,控件才会转到第一组括号。由于next
命令,包含> Added to
的行进入第一个花括号,然后由于next
命令立即开始读取下一行。因此,> Added to
行不会到达第二个花括号,因此> Added to
不会出现在拆分文件中。
由于没有条件,所以每一行都会遇到第二组,因此总是如此。
x=$4
- x
变量分配了第四个字段值$4
(“”(空格)是默认的 awk 字段分隔符,因此,第4个字段将包含文件名,例如botcc.rules
)
botcc.rules
内容的输出:
$ cat botcc.rules
alert tcp any any -> any any (msg:"testing rule 1";sid:1323;rev:1;)
alert tcp any any -> any any (msg:"testing rule 2";sid:1323;rev:1;)
compromised.rules
内容的输出:
$ cat compromised.rules
alert tcp any any -> any any (msg:"testing rule for comp";sid:1323;rev:1;)