shell 脚本 - 删除特定模式之前的字符

shell 脚本 - 删除特定模式之前的字符

我有我的/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

我想我应该使用sedorawkcut

谢谢

答案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到适当的编辑文件中。


您还可以使用perllookehead来不需要反向引用:

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!

相关内容