假设我有一个文件叫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,效果如下:
如果要在第7行上面加入,那么命令行就是#sed '7 i\玄学大师齐达内\n\?派始祖阿来格里' Group.xml,效果如下:
上面的操作还有一种写法,比如说要在第4行里,插入一句“足球天才莫耶斯!”,那么使用的命令是#sed -i '/5/ a\千古奇冤莫耶斯! ' Group.xml,看一下效果:
虽然要求是在第四行里加入,但是命令写的却是“/5/”,又在sed语句里面用了a,也就是“在第五行之前”加入一句话,也就是插入到第四行。
上面的例子都是已知目标文件的第几行,如果有一个文件你不知道第几行,而是只知道倒数第几行,怎么操作呢?
比如我要在Group.xml倒数第二行插入“满门忠烈阿森纳”,那么操作的语句是#sed '$i 满门忠烈阿森纳' Group.xml,效果如下:
现在我要在倒数第二行插入新的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/
最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1967288