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

比如我现在有一个文件:

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**************
问题是这***********应该怎么写?

根据位置替换即可:

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

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

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

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

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

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-29
oldip=`cat /mnt/file | grep "subnet" | awk '{print $2}'`  //取得那个位置的ip
sed -i  "s/$oldip/\$ip/" /mnt/file   //替换为新的IP

第2个回答  2013-11-28
是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

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网