shell脚本定位某个文件中特定位置的字符串并进行替换应该怎么写? 10

比如我现在有一个文件:subnet192.168.1.0netmask255.255.255.0{route192.168.1.100192.168.1.200}在这个文... 比如我现在有一个文件:

subnet 192.168.1.0 netmask 255.255.255.0 {
route 192.168.1.100 192.168.1.200
}

在这个文件中 我需要将192.168.1.0替换成$ip
之后再脚本中
read ip
但是由于这个文件每次执行脚本的时候都不确定所以不能使用
sed -i 's/192.168.1.0/'"$ip"'/' /mnt/file
我想直接能通过这个192.168.1.0在文件中的位置来确定,因为这个东西在文件中的位置是不会变的。各位大神门 有没有什么办法呀?
有一个想法 可不可以用awk获取到subnet后面的这一段ip 然后给一个新的变量呢?
例如我设定一个变量a
a=awk**************
问题是这***********应该怎么写?
展开
 我来答
百度网友5311d79
2013-11-29 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3191万
展开全部

根据位置替换即可:

read ip
sed -ri "/subnet/s/(subnet )[^ ]+( netmask.*)/\1$ip\2/" /mnt/file

/subnet/ - 先正则匹配到含有subnet的行,然后替换。

替换的时候将不变的部分用小括号括起来,后面依次用\1 , \2 原封不动地引用回来。

-r 选项用于支持扩展正则,这样就不需要额外的转义符。

[^ ] 表示不为空格的任意一个字符,+ 表示重复该字符至少1次。

百度网友1849e16
2013-11-29
知道答主
回答量:3
采纳率:0%
帮助的人:2.7万
展开全部
oldip=`cat /mnt/file | grep "subnet" | awk '{print $2}'`  //取得那个位置的ip
sed -i  "s/$oldip/\$ip/" /mnt/file   //替换为新的IP
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunnyhouyq
2013-11-28 · TA获得超过648个赞
知道小有建树答主
回答量:515
采纳率:100%
帮助的人:519万
展开全部
是192.168.1.0会变但是他所在的行数不变的意思吗

sed '行数s/xxxx/bbbb/' aaa.file
追问
sed '行数s/xxxx/bbbb/' aaa.file

所在行是不会变的 但是问题在于xxxx会变
有没有什么方法可以替换的时候不用到xxxx?直接使用xxxx在这一行所在的位置这样可以做到吗?
追答
sed '行数/c subnet $ip netmask 255.255.255.0 {'  file

看看行不行
或者
sed '行数s/.*/subnet $ip netmask 255.255.255.0 {' file
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式