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

文件假设为test.sh每次运行bashtest.sh命令该脚本会去分析/etc/hosts文件查找类似127.0.0.1www.test.com这样的行,在前面去除#标... 文件假设为 test.sh

每次运行bash test.sh命令
该脚本会去分析/etc/hosts文件
查找类似 127.0.0.1 www.test.com这样的行,在前面去除#标记或者加上#标记,(匹配到#则去掉#,没匹配到#则加上#),host文件有很多其他项的配置,保持文件其他部分的内容不变。实现每运行脚本一次自动开关指定域名的解析开关,自动增删#号。
目的就是为了方便频繁测试线上环境和本地开发环境时不用每次都去修改host文件改变域名解析。简便操作。
脚本中尽可能使用sed命令来处理,求脚本代码,感谢!
展开
 我来答
hixtao
2013-12-16 · TA获得超过1099个赞
知道小有建树答主
回答量:468
采纳率:85%
帮助的人:326万
展开全部
#下面是脚本内容,注意修改/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"
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式