删除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