【问题标题】:Extract Text From CSV从 CSV 中提取文本
【发布时间】:2016-05-18 14:03:49
【问题描述】:

我想从 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。我就是想不通。我对此很陌生。

谁能给我一些建议?

谢谢

【问题讨论】:

  • 1 行并不是一个示例。您最好发布几行示例输入和预期输出。包括没有 pcre 的行,有多个 pcre,如果 pcre 出现在您希望忽略它的上下文中(例如,在字符串内部,作为其他词的一部分等),如果它们存在的话。

标签: regex bash awk sed grep


【解决方案1】:

您可以使用 grep 执行此操作。但是 grep 的问题是它不能只显示匹配的组,它只能显示匹配的文本。
为了解决这个问题,您需要使用前瞻和后瞻。

前瞻 (?=foo)
断言紧跟在字符串中当前位置之后的是 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

【讨论】:

    【解决方案2】:

    使用 GNU sed:

    $ sed -n -r 's/.*\<pcre:"([^"]+).*/\1/p' file
    /[0-9a-zA-Z]{50}/R
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      相关资源
      最近更新 更多