我正在用这个神奇的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地址开头,请执行
from
到 F
之间根据以下字符串出现次数替换它第2部分
我只想要
12.2.2.2来自http://hosts-file.net/fsa.txt
的英特尔:: DOMAIN通过intel.criticalstack.com F
我用
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
感谢。
答案 0 :(得分:2)
一些perl代码怎么样:
perl -ne 's/Intel::DOMAIN.*from http:\/\/(.+?)\..*/\1/; m/^(\d{1,3}\.){3}\d{1,3}/ and print'
它首先删除不需要的文本,并且只有当它以看起来像IP地址的东西开头时才打印该行。如果您不能使用perl代码,则可以将其“移植”为sed。