我有我的/etc/hosts
:
#192.168.54.144 name1
#192.168.54.144 name2
192.168.54.143 name3
我想删除所有#
后跟 IP 地址 Ipv4 的字符以获得:
192.168.54.144 name1
192.168.54.144 name2
192.168.54.143 name3
我想我应该使用sed
orawk
或cut
?
谢谢
答案1
使用 GNU sed
:
仅匹配真实IP(通过):
sed -E 's/^#(((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5]))/\1/' file
或简单匹配,检查以下数字#
:
sed 's/^#\([[:digit:]]\)/\1/' file
这只会打印结果,添加-i
到适当的编辑文件中。
您还可以使用perl
lookehead来不需要反向引用:
perl -pe 's/^\#(?=[[:digit:]])//' file
答案2
命令
sed "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename
输出
sed "/^#[0-9]*\.[0-9]*\.[0-9]*\.[0-9]\{3\}/s/#//g" filename
192.168.54.144 name1
192.168.54.144 name2
192.168.54.143 name3
答案3
尝试使用 python 并且效果很好
#!/usr/bin/python
import re
g=re.compile(r'[0-9]*\.[0-9]*\.[0-9]*')
m=open('u.txt','r')
for i in m:
if re.search(g,i):
print i.strip().replace("#","")
输出1
92.168.54.144 name1
192.168.54.144 name2
192.168.54.143 name3
答案4
cat myfile | tr -d '#'
简单的tr!