最近在学习sed,工作中遇到的一些实际使用的场景,开篇博客记录一下免得以后忘记,不定期更新中~如果大家也正好在学的,那就一起学习下~
需求1:向文件中特定字符的上一行追加另一个文件的内容:
语句:sed -ie '/parameter/{h;s/.*/cat 48105config.xml/e;G}' sedtest.txt
parameter是sedtest.txt中的最后一行
48105config.xml是我需要添加到文件sedtest.txt的内容
参数h的意思是将当前模式空间中内容覆盖至保持空间
参数G的意思是将当前保持空间中的内容追加至模式空间
关于这两个参数的用法,大家可以参考这篇博客:http://blog.csdn.net/xiexingshishu/article/details/5051413
需求2:将flag1和flag2之间的999替换为888,文件中其他999不被替换
demo.txt文件内容如下:
flag1
abc999
bcd999
aaa888
bbb999
ccc666
flag2
999
a999
abc999
bdc999
语句: sed -i -e '/flag1/{:a;n;s/999/888/g;/flag2/!ba}' demo.txt
其中/flag1/表示先找到flag1这行
:a表示设置一个标签
:n表示读取下一行,即读取flag1的下一行
/flag2/!ba表示当前行不为flag2时,跳转到标签a处,继续执行替换动作s/999/888/g,b的意思相当于goto,跳转到标签处。