日期:2014-05-16  浏览次数:21088 次

删除IP地址及前缀
本帖最后由 u013514345 于 2014-03-06 14:08:23 编辑
文件中包含一些网址,IPv4地址、IPv4地址前缀和IPv6地址以及前缀

IPv4和IPv6地址是正常的地址格式,
v4前缀有多种形式,比如:
192.168
10.1.1.

v6前缀形如:1111:0000:1F1F  FF00::111 

我想要删除所有这些地址只留下域名

正常的IPv4地址很容易就去掉了 

但v4前缀的话,如果用字母+点来排除,一些网址的部分也被去掉了,比如163.com的163
用单词边界\b \<也无法成功(因为.默认也是单词分隔?)

我的想法是定义空格来分割字符串,然后删掉所有的点+数字串 v6地址和前缀只需删除所有的带冒号的字符串即可 
不知可行否?试了试未成功,还有其他合适的方法吗?

多谢~


------解决方案--------------------
总结起来,就是包含:或者纯数字的串要扔掉。

#!/bin/bash

cat > temp.txt << EOF
google.com youtube.com 1.1.1.1 blogspot.com 1111::0000:FFFF
microsoft.com msft.net 192.168.
sina.com.cn 10.10.1.  weibo.com 1.1 FFFF::0000
163.com 192.168.1.1
EOF

awk '{ 
    for (i = 1; i <= NF; ++i) {
        has_alpha = match($i, /[[:alpha:]]/);
        if (has_alpha == 0) {
            $i = "";
            continue;
        }
        has_colon = match($i, /:/);
        if (has_colon) {
            $i = "";
        }
    }
    print
}' temp.txt

------解决方案--------------------
[root]# cat a.txt
1.1 google.com ns1.360safe.com youtube.com 1.1.1.1 blogspot.com 1111::0000:FFFF
microsoft.com msft.net 192.168.
sina.com.cn 10.10.1.  weibo.com 1.1 FFFF::0000
163.com 192.168.1.1

[root]# sed 's/[^ ]*:[^ ]*//g; s/[0-9]\+\.[^a-zA-Z]\+ //g; s/[0-9]\+\.[^a-zA-Z]\+$//g' a.txt
google.com ns1.360safe.com youtube.com blogspot.com 
microsoft.com msft.net 
sina.com.cn weibo.com 
163.com