2016-11-18 66 views
1

目前我正在一个项目中,我有一个文件充满了IP地址我想删除私人(整个范围)的IP地址,并使用bash来完成它。我做了一个私人地址的匹配,但无法删除它。删除所有私人IP地址

我曾尝试:

sed -i '/(192)\.(168)(\.([2][0-5][0-5]|[1][0-9][0-9]|[1-9][0-9]|[0-9])){2}/d' validIPOnly 

同为

127.x.x.x,172.16.x.X,10.x.x.x 
+0

1.'{2}'表示法在sed上不起作用。使用'-E'。 2.'d'将删除整行,而不是匹配 – nu11p01n73R

+0

172.16.0.0/12 - > [范围从172.16.0.0到172.31.255.255](https://en.wikipedia.org/wiki/Private_network#Private_IPv4_address_spaces) – Cyrus

+0

感谢您的帮助,我会在一瞬间测试它 – Atif

回答

1

当捕获组与sed您可能需要逃避()或指定选项-E

$ sed -E -i '/(...)...' 

$ sed -i '/\(...\)...` 

对于GNU的sed只使用-r选项,而不是-E

+1

@ hek2mgl:感谢您的编辑;在Mac版本的Bash(GNU bash,版本3.2.57(1) - 发行版(x86_64-apple-darwin16) 中没有'-r'选项,所以'-E'就相当于我相信的。 –

+0

Side注意:我会在答案中省略'-i'开关,或者你要解释它需要一个关于非GNU sed的参数,或者直接将它留给OP来改变他的文件*。我推荐后者,特别是因为这样可以防止数据丢失 – hek2mgl

+0

噢,我以为'-r'和'-E'都可以在Mac上运行,但'-r'是便携式的,对不起编辑,然后 – hek2mgl

相关问题