比如我现在有一个文件:
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 ipsed -ri "/subnet/s/(subnet )[^ ]+( netmask.*)/\1$ip\2/" /mnt/file
/subnet/ - 先正则匹配到含有subnet的行,然后替换。
替换的时候将不变的部分用小括号括起来,后面依次用\1 , \2 原封不动地引用回来。
-r 选项用于支持扩展正则,这样就不需要额外的转义符。
[^ ] 表示不为空格的任意一个字符,+ 表示重复该字符至少1次。
sed -i "s/$oldip/\$ip/" /mnt/file //替换为新的IP
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