我想从snort规则中获取正则表达式。
以下是我作为csv保存的文字示例 - https://rules.emergingthreats.net/open/snort-2.9.0/rules/emerging-exploit.rules
所以有多个规则,
#by Akash Mahajan
#
alert udp $EXTERNAL_NET any -> $HOME_NET 14000 (msg:"ET EXPLOIT Borland VisiBroker Smart Agent Heap Overflow"; content:"|44 53 52 65 71 75 65 73 74|"; pcre:"/[0-9a-zA-Z]{50}/R"; reference:bugtraq,28084; reference:url,aluigi.altervista.org/adv/visibroken-adv.txt; reference:url,doc.emergingthreats.net/bin/view/Main/2007937; classtype:successful-dos; sid:2007937; rev:4;)
我只想要" pcre"之后出现的文字。在所有这些文件中,提取并打印到新文件中,不带引号
pcre:"/[0-9a-zA-Z]{50}/R";
因此,从上面这一行开始,我想以下面的文字结尾;
/[0-9a-zA-Z]{50}/R
来自每个地方" pcre"出现在整个文件中。
我一直在搞乱grep,awk和sed。我无法弄明白。我对此很新。
有人能给我一些提示吗?
由于
答案 0 :(得分:1)
使用GNU sed:
$ sed -n -r 's/.*\<pcre:"([^"]+).*/\1/p' file
/[0-9a-zA-Z]{50}/R
答案 1 :(得分:0)
您可以使用grep执行此操作。但grep的问题是它不能只显示匹配的组,它只能显示匹配的文本。
为此,您需要使用前瞻和后视。
Lookahead(?= foo)
断言紧跟在字符串中当前位置之后的是foo
Lookbehind(?&lt; = foo)
断言紧接在字符串中当前位置之前的内容是foo
┌─ print file to standard output
│ ┌─ has pcre:" before matching group (look-behind)
│ │ ┌─ has "; after matching group (look-ahead)
cat file | grep -Po '(?<=pcre:\")(.*)(?=\";)'
││ └─ what we want (matching group)
│└─ print only matched part
└─ all users