sed如何在文件特定的位置插入文本?

简介:

假设我有一个文件叫Group.xml,它是长这个样子的(前面的数字是行号):

1
2
3
4
5
6
7
8
9
1 <Group>
2  <Server>1.2.3.4:8801< /Server >
3  <Server>5.6.7.8:8801< /Server >
4  <Server>9.9.9.9:8801< /Server >
5  <Server>J.J.J.J:8801< /Server >
6  <Server>Q.Q.Q.Q:8801< /Server >
7  <Server>K.K.K.K:8801< /Server >
8  <Server>A.A.A.A:8801< /Server >
9 < /Group >


比如现在要在原有的基础上,第7行下面加入两行字分别是“玄学大师齐达内”和“囧派始祖阿来格里”,那么使用的语句是#sed '7 a\玄学大师齐达内\n\囧派始祖阿来格里' Group.xml,效果如下:

wKiom1nDIlLgxxumAAB4SSxQN0o833.png


如果要在第7行上面加入,那么命令行就是#sed '7 i\玄学大师齐达内\n\?派始祖阿来格里' Group.xml,效果如下:

wKiom1nDI5fgKZaXAABzj_imNvE845.png


上面的操作还有一种写法,比如说要在第4行里,插入一句“足球天才莫耶斯!”,那么使用的命令是#sed -i '/5/ a\千古奇冤莫耶斯! ' Group.xml,看一下效果:

wKioL1nDIP7AQaFtAACvaQgMu9M019.png

虽然要求是在第四行里加入,但是命令写的却是“/5/”,又在sed语句里面用了a,也就是“在第五行之前”加入一句话,也就是插入到第四行。


上面的例子都是已知目标文件的第几行,如果有一个文件你不知道第几行,而是只知道倒数第几行,怎么操作呢?


比如我要在Group.xml倒数第二行插入“满门忠烈阿森纳”,那么操作的语句是#sed '$i 满门忠烈阿森纳'  Group.xml,效果如下:

wKiom1nDJpHS6WRyAABi-izCLI0517.png


现在我要在倒数第二行插入新的IP地址,但是这个IP是一个变量,同时又不可以破坏格式(前面有空格),那么使用的方法就是:

1
2
read  -p  "请输入您要新增的P2PServer的外网ip地址:"  ip
sed  -i  '$i ' "\  <Server>$ip:8801</Server>" ''  文件的绝对地址


#sed -i 默认情况下对于新插语句是不含开头的空格的,但是前面加上了“\”,就把问题解决了。


如果我要把test.xml文件里的10改成1000,那么就使用#sed -i ‘s/10/1000/g’ test.xml,但是如果需要把1000改成变量,如#sed -i ’s/10/$num/g‘ test.xml就不成功。


此时需要把单引号改成双引号,如下边例子:

1
2
$num=1000
sed  -i  "s/10/$num/g"  test .xml


参考资料:http://blog.jobbole.com/109088/


最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!

wKioL1l16m3BMYDKAACPHEqd55Q687.jpg


 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1967288


相关文章
|
6月前
|
开发工具 Perl
使用sed去掉代码中的行号
使用sed去掉代码中的行号
使用sed去掉代码中的行号
|
4月前
|
Linux
echos-tail重定向符,echo 命令可以输出相应的字符串 ,echo hello,echo `pwd`执行命令,输出路径,否则就是字符串了,单个>表示的是将左侧的命令覆盖写入到右侧指定的文件当
echos-tail重定向符,echo 命令可以输出相应的字符串 ,echo hello,echo `pwd`执行命令,输出路径,否则就是字符串了,单个>表示的是将左侧的命令覆盖写入到右侧指定的文件当
|
6月前
|
Unix Shell Linux
sed的替换操作
sed的替换操作
51 3
|
6月前
grep仅显示匹配行的文件名
grep仅显示匹配行的文件名
335 1
|
6月前
|
Linux Perl
`sed`命令删除文件中匹配特定模式的行
`sed`命令删除文件中匹配特定模式的行
138 4
|
Perl
Sed 删除包含某些字符串的行
sed -i '/关键字符/d' 文件名
2063 0
|
数据安全/隐私保护
VI操作--跳到最后一行和跳到最后一行的最后一个字符
vi操作 1.跳到文本的最后一行:按“G”,即“shift+g” 2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”。 3.跳到第一行的第一个字符:先按两次“g”, 4.跳转到当前行的第一个字符:在当前行按“0”。
5598 0
|
Java Maven
快速删除所有以.lastUpdate结尾的文件
快速删除所有以.lastUpdate结尾的文件
1464 0
|
SQL Shell Perl
[20180413]bash 位置参数.txt
[20180413]bash 位置参数.txt --//上午在测试hugepage时,链接http://blog.itpub.net/267265/viewspace-2152888/ --//脚本写的太不灵活,不应该每次测试修改脚本,应该采用传位置参数.
949 0