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

shell脚本定位某个文件中特定位置的字符串并进行替换应该怎么写?
根据位置替换即可:read ipsed -ri "\/subnet\/s\/(subnet )[^ ]+( netmask.*)\/\\1$ip\\2\/" \/mnt\/file\/subnet\/ - 先正则匹配到含有subnet的行,然后替换。替换的时候将不变的部分用小括号括起来,后面依次用\\1 , \\2 原封不动地引用回来。-r 选项用于支持扩展正则,这样就不需要额外的转义符。

linux shell命令怎么查找文件中指定字符串,并把这个字符串所在行和下面...
1、grep -i "aaa" -A 1 1.txt | grep -v -e "--" >2.txt grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读...

shell 中文件字符串替换
在Shell编程中,字符串替换操作可以通过一些特定的命令和技巧实现。例如,下面是一个脚本片段,它使用`grep`和临时文件来查找并替换文件中的'desc'字符串。首先,创建一个临时文件`tmp_desc`(通过`mktemp`命令),然后从输入文件中逐行读取,如果找到'desc',则使用`sed`替换并记录当前行号,否则直接输出...

shell中文件字符串替换
答案:在Shell中,可以使用`sed`命令进行文件字符串替换。具体语法为:`sed -i 's\/原字符串\/新字符串\/g' 文件名`。详细解释:1. sed命令简介 `sed`是一个流编辑器,用于对文本文件进行非交互式处理。它可以对文件内容进行搜索、替换、删除、插入等操作。2. 字符串替换语法 `sed`命令中的替换语...

如何在shell脚本中修改添加替换指定文件中的内容
1、启动Linux系统,用ssh工具连上Linux系统。2、bash自带了一些调试选项。3、在脚本启动时添加调试选项。来调试debug.sh。4、在脚本内添加调试选项,使用set 命令。5、现在要看debug.sh脚本执行的调试信息,就不需要使用bash -x .\/debug.sh执行了。6、在脚本开头添加-xv选项。7、同样现在执行.\/...

请问怎么在shell脚本中,替换文件多行里面的指定字符串
sed -i '\/aaa\/{:a;n;s\/123\/xyz\/g;\/eee\/!ba}' yourfile先匹配aaa,匹配到后执行大括号里的语句。n 读取下一行 s\/123\/xyz\/g 将123替换为xyz,全局替换,同一行中出现几次替换几次 :a 设定跳转标签a \/eee\/!ba 若当前行匹配不上eee,则跳转到标签a处继续执行,构成一个循环。若匹配...

shell中,什么命令可以替换文本中指定位置的字符? 比如说abc 替换成a...
如果位置固定,比如从字符串第四个字符开始,共3个字符,{变量:4:3} 是取得子字符串 {变量\/旧字串\/新字串} 是替换 两个结合起来,见上图例子 就是 把任意字符串中固定位置的字符改为想要的字符。也可以用其他方式,比如awk、perl、sed等 ...

Linux下的shell编程 如何替换文件中的内容
可以这样做:方法1:sed -i 's\/被替换的内容\/要替换成的内容\/' file 方法2:sed 's\/被替换的内容\/要替换成的内容\/g' file > file.out;mv file.out file。

shell脚本sed命令如何使用变量替换掉包含指定字符串的整行
sed "s\/zip\/$zip\/g" file sed双引号可以识别变量

巧用shell脚本批量替换字符串
需求描述:面对一个网站因域名变更,需要批量处理大量含有原域名关键字的文件,包括html、php、phtml等类型的数千个文件。手工操作无法完成,因此选择shell脚本进行自动化处理。基本思路:分为两步,一为文件查找,二为全文替换。先使用find命令查找所有包含关键字的文件,再使用sed工具进行全文替换。为降低...

相似回答