帮忙写个Linux下shell脚本,(使用sed命令处理hosts文件)

文件假设为 test.sh

每次运行bash test.sh命令
该脚本会去分析/etc/hosts文件
查找类似 127.0.0.1 www.test.com这样的行,在前面去除#标记或者加上#标记,(匹配到#则去掉#,没匹配到#则加上#),host文件有很多其他项的配置,保持文件其他部分的内容不变。实现每运行脚本一次自动开关指定域名的解析开关,自动增删#号。
目的就是为了方便频繁测试线上环境和本地开发环境时不用每次都去修改host文件改变域名解析。简便操作。
脚本中尽可能使用sed命令来处理,求脚本代码,感谢!

第1个回答  2013-12-16
#下面是脚本内容,注意修改/etc/hosts文件需要超级用户权限,换句话说,你需要sudo执行本脚本。

#!/bin/bash
DELIM="'"
N=2

echo "Please pull the file to me."
#read storepath1
storepath1="/etc/hosts"

storepath1=`echo "$storepath1" | cut -d "$DELIM" -f $N`

#这个好理解:
#1.把不是以#号开头的行替换为以!!@开头
#2.把以#号开头的行的 #号删除
#3.把!!@替换为# 号

#sed -i -r -e '/^#/! s|^|!!@|' -e 's|^#||' -e 's|^!!@|#|' "$storepath1"

#这个精炼些
#如果行以 #号开头,则删除#。
# 如果刚刚进行了删除操作,那么执行t 操作,跳到sed脚本末尾,结束操作。
# 如果刚刚没有进行删除操作,那么继续执行s|^|#|,将开头添加 #号。

#sed -i -r -e 's|^#||;t;s|^|#|' "$storepath1"

#这个匹配3位数+点开头的行
#原理同上,只不过不是处理每一行,而是处理以三位数加点号开头的行。

sed -i -r -e 's|^#([0-9]{3}\.)|\1|;t;s|^([0-9]{3}\.)|#\1|' "$storepath1"本回答被提问者采纳
相似回答