sed解析> 50 MB文件超过50k行失败,没有错误

时间:2015-10-17 13:31:20

标签: regex sed

我正在用这个神奇的sed解析一个描述文件(有问题)

  

sudo sed -nE's /(^ [0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3})。*   http://(。?)\ s +。 $ /!\ 1 \ 2 / p'

即使我从orginial文件中复制样本行并放入临时文件,它也能正常工作,但在完整文件中它失败了。我尝试使用!开关进行调试,但也无法正常工作,不会返回不成功的匹配项。我去哪里了?

背景 我有一个案例,我需要post-process的文件。样本格式如下: -

bigspeedpro.com Intel::DOMAIN   from http://malc0de.com/bl/BOOT via intel.criticalstack.com     F
1.1.1.1 Intel::DOMAIN   from http://abcd.com/bl/BOOT via intel.criticalstack.com     F

预期输出为: -

1.1.1.1 abcd

解析如下: -

  • 任何不以IP地址开头的内容都会删除该行
  • 如果以IP地址开头,请执行

    • 删除Intel :: DOMAIN
    • from F之间根据以下字符串出现次数替换它
    • 例如malc0de或abcd

第2部分

我只想要 12.2.2.2来自http://hosts-file.net/fsa.txt的英特尔:: DOMAIN通过intel.criticalstack.com F

http://hosts-file.net/fsa.txt

我用

  

sudo sed -nE's /(^ [0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3})。*   http://(。*)\ s +?$ / \ 1 \ 2 / p'

它给了我

  

12.2.2.2 hosts-file.net/fsa.txt通过intel.criticalstack.com

我不想要这个?

解决了第2部分

  

silkman @ Silky-flows:〜/ tmp $ sudo sed -nE   's /(^ [0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3})。 *   http://(。?)\ s + [v] [i] [a]。 $ / \ 1 \ 2 / p'

更新

1.1.1.1 www.abc.com
1.1.2.2 def.com
2.2.2.2 mnx.dbc.net

但是,我希望将ip地址后的第二列缩短为我自己选择的字符串,例如在第二列中我只接受

  

ABC   高清   MNX

一旦发现它只是将整个字符串替换为

1.1.1.1 abc
1.1.2.2 def
2.2.2.2 mnx

感谢。

1 个答案:

答案 0 :(得分:2)

一些perl代码怎么样:

perl -ne 's/Intel::DOMAIN.*from http:\/\/(.+?)\..*/\1/; m/^(\d{1,3}\.){3}\d{1,3}/ and print'

它首先删除不需要的文本,并且只有当它以看起来像IP地址的东西开头时才打印该行。如果您不能使用perl代码,则可以将其“移植”为sed。