Chinaunix首页 | 论坛 | 博客
  • 博客访问: 69878
  • 博文数量: 12
  • 博客积分: 266
  • 博客等级: 二等列兵
  • 技术积分: 181
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-27 16:20
文章分类

全部博文(12)

文章存档

2012年(12)

我的朋友

分类: Python/Ruby

2012-10-11 10:45:27

sed替换,删除,插入,追加操作实例~
实例是学习模仿贯通的最佳方式~ 

实例测试文本

  1. [root@testserver ~]# cat test.txt
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  5. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  6. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  7. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

替换命令全局g的作用实例 

  1. [root@testserver ~]# sed 's/1/sed/' test.txt   #没g的话只匹配第一次出现的1进行替换
  2. sed:2:3:a:b:c:A:B:C:1:2:3
  3. sed:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. sed:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  5. sed:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  6. sed:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  7. sed:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  8. [root@testserver ~]# sed 's/1/sed/g' test.txt  #有g的话匹配所有的1进行替换
  9. sed:2:3:a:b:c:A:B:C:sed:2:3
  10. sed:2:3:4:a:b:c:d:A:B:C:D:sed:2:3:4
  11. sed:2:3:4:5:a:b:c:d:e:A:B:C:D:E:sed:2:3:4:5
  12. sed:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:sed:2:3:4:5:6
  13. sed:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:sed:2:3:4:5:6:7
  14. sed:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:sed:2:3:4:5:6:7:8

替换命令-n参数和p的作用实例

  1. [root@testserver ~]# sed 's/f/sed/' test.txt  #不加参数,不管是否匹配都打印输出
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  5. 1:2:3:4:5:6:a:b:c:d:e:sed:A:B:C:D:E:F:1:2:3:4:5:6
  6. 1:2:3:4:5:6:7:a:b:c:d:e:sed:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  7. 1:2:3:4:5:6:7:8:a:b:c:d:e:sed:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  8. [root@testserver ~]# sed 's/f/sed/p' test.txt #默认输出加p后,把匹配的行再打印输出多一次
  9. 1:2:3:a:b:c:A:B:C:1:2:3
  10. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  11. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  12. 1:2:3:4:5:6:a:b:c:d:e:sed:A:B:C:D:E:F:1:2:3:4:5:6
  13. 1:2:3:4:5:6:a:b:c:d:e:sed:A:B:C:D:E:F:1:2:3:4:5:6
  14. 1:2:3:4:5:6:7:a:b:c:d:e:sed:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  15. 1:2:3:4:5:6:7:a:b:c:d:e:sed:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  16. 1:2:3:4:5:6:7:8:a:b:c:d:e:sed:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  17. 1:2:3:4:5:6:7:8:a:b:c:d:e:sed:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  18. [root@testserver ~]# sed -n 's/f/sed/' test.txt  #只加-n参数,不输出

  19. [root@testserver ~]# sed -n 's/f/sed/p' test.txt  #不输出默认,但是p又输出匹配的行
  20. 1:2:3:4:5:6:a:b:c:d:e:sed:A:B:C:D:E:F:1:2:3:4:5:6
  21. 1:2:3:4:5:6:7:a:b:c:d:e:sed:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  22. 1:2:3:4:5:6:7:8:a:b:c:d:e:sed:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

替换命令变量的作用实例

  1. [root@testserver ~]# sed 's/f/&sed&/' test.txt    # &表示匹配的字符
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  5. 1:2:3:4:5:6:a:b:c:d:e:fsedf:A:B:C:D:E:F:1:2:3:4:5:6
  6. 1:2:3:4:5:6:7:a:b:c:d:e:fsedf:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  7. 1:2:3:4:5:6:7:8:a:b:c:d:e:fsedf:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  8. [root@testserver ~]# sed 's/\(e\):\(f\)/\&\2\1\&/' test.txt  # \1表示匹配第一个括号内容
  9. 1:2:3:a:b:c:A:B:C:1:2:3
  10. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  11. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  12. 1:2:3:4:5:6:a:b:c:d:&fe&:A:B:C:D:E:F:1:2:3:4:5:6
  13. 1:2:3:4:5:6:7:a:b:c:d:&fe&:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  14. 1:2:3:4:5:6:7:8:a:b:c:d:&fe&:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  15. [root@testserver ~]# sed 's/\(e\):\(f\)/\&\2&\1\&/' test.txt # \2第一个括号内容,类推
  16. 1:2:3:a:b:c:A:B:C:1:2:3
  17. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  18. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  19. 1:2:3:4:5:6:a:b:c:d:&fe:fe&:A:B:C:D:E:F:1:2:3:4:5:6
  20. 1:2:3:4:5:6:7:a:b:c:d:&fe:fe&:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  21. 1:2:3:4:5:6:7:8:a:b:c:d:&fe:fe&:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

替换命令指定范围和分组作用实例

  1. #指定范围用逗号,范围内分组操作可以用大括号里面加分号
  2. [root@testserver ~]# sed '/d:A/,/g:A/{s/1/sed/;s/2/222/g}' test.txt
  3. 1:2:3:a:b:c:A:B:C:1:2:3
  4. sed:222:3:4:a:b:c:d:A:B:C:D:1:222:3:4
  5. sed:222:3:4:5:a:b:c:d:e:A:B:C:D:E:1:222:3:4:5
  6. sed:222:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:222:3:4:5:6
  7. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  8. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  9. #指定范围时候可以由行号和匹配混合指定
  10. [root@testserver ~]# sed '2,/g:A/{s/1/sed/;s/2/222/g}' test.txt 
  11. 1:2:3:a:b:c:A:B:C:1:2:3
  12. sed:222:3:4:a:b:c:d:A:B:C:D:1:222:3:4
  13. sed:222:3:4:5:a:b:c:d:e:A:B:C:D:E:1:222:3:4:5
  14. sed:222:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:222:3:4:5:6
  15. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  16. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  17. #也可以均由行号指定
  18. [root@testserver ~]# sed '2,5{s/1/sed/;s/2/222/g}' test.txt
  19. 1:2:3:a:b:c:A:B:C:1:2:3
  20. sed:222:3:4:a:b:c:d:A:B:C:D:1:222:3:4
  21. sed:222:3:4:5:a:b:c:d:e:A:B:C:D:E:1:222:3:4:5
  22. sed:222:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:222:3:4:5:6
  23. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  24. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  25. #如果指定行号顺序调换,那么会指定到第一个匹配行,其他忽略不匹配
  26. [root@testserver ~]# sed '5,2{s/1/sed/;s/2/222/g}' test.txt
  27. 1:2:3:a:b:c:A:B:C:1:2:3
  28. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  29. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  30. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  31. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  32. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

  33. #如果由行号+匹配指定,且顺序颠倒,会匹配行号之后的所有行
  34. [root@testserver ~]# sed '5,/d:A/{s/1/sed/;s/2/222/g}' test.txt
  35. 1:2:3:a:b:c:A:B:C:1:2:3
  36. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  37. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  38. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  39. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  40. sed:222:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:222:3:4:5:6:7:8

替换命令指定分隔符实例

  1. #指定分隔符只能针对替换命令里面的匹配,不能指定范围匹配的分隔符
  2. [root@testserver ~]# sed '2,/g:A/{s#1#sed#;s/2/222/g}' test.txt
  3. 1:2:3:a:b:c:A:B:C:1:2:3
  4. sed:222:3:4:a:b:c:d:A:B:C:D:1:222:3:4
  5. sed:222:3:4:5:a:b:c:d:e:A:B:C:D:E:1:222:3:4:5
  6. sed:222:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:222:3:4:5:6
  7. sed:222:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:222:3:4:5:6:7
  8. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

删除命令d作用实例

  1. [root@testserver ~]# sed '2d' test.txt  #标准输出删除第二行,原文件没变
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  4. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  5. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  6. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  7. [root@testserver ~]#
  8. [root@testserver ~]# sed '2,4d' test.txt #标准输出删除第二至第四行,原文件不变
  9. 1:2:3:a:b:c:A:B:C:1:2:3
  10. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  11. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  12. [root@testserver ~]#
  13. [root@testserver ~]# sed '/f:g/d' test.txt  #标准输出删除匹配行,原文件不变
  14. 1:2:3:a:b:c:A:B:C:1:2:3
  15. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  16. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  17. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  18. [root@testserver ~]#
  19. [root@testserver ~]# sed '2,/f:g/d' test.txt #标准输出删除第二至匹配行,原文件不变
  20. 1:2:3:a:b:c:A:B:C:1:2:3
  21. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

删除命令-i参数直接修改原文件实例

  1. [root@testserver ~]# sed -i '2d' test.txt #直接作用于原文件,删除第二行
  2. [root@testserver ~]# cat test.txt
  3. 1:2:3:a:b:c:A:B:C:1:2:3
  4. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  5. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  6. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  7. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

插入命令i作用实例

  1. [root@testserver ~]# sed '2i\sed' test.txt  #在第二行前插入一行sed
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. sed
  4. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  5. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  6. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  7. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  8. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  9. [root@testserver ~]#
  10. [root@testserver ~]# sed '2,5i\sed' test.txt #插入只针对一行,不能针对范围
  11. 1:2:3:a:b:c:A:B:C:1:2:3
  12. sed
  13. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  14. sed
  15. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  16. sed
  17. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  18. sed
  19. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  20. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  21. [root@testserver ~]#
  22. [root@testserver ~]# sed '2i\s\        #插入多行的话,要在换行处加反斜杠
  23. > e\
  24. > d' test.txt
  25. 1:2:3:a:b:c:A:B:C:1:2:3
  26. s
  27. e
  28. d
  29. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  30. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  31. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  32. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  33. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  34. [root@testserver ~]# sed '2i\s\e\d' test.txt  #一定要有换行符才能生效
  35. 1:2:3:a:b:c:A:B:C:1:2:3
  36. sed
  37. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  38. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  39. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  40. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  41. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

追加命令a作用实例

  1. [root@testserver ~]# sed '2a\sed' test.txt #与插入命令i异曲同工
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. sed
  5. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  6. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  7. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  8. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  9. [root@testserver ~]# sed '2,5a\sed' test.txt
  10. 1:2:3:a:b:c:A:B:C:1:2:3
  11. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  12. sed
  13. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  14. sed
  15. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  16. sed
  17. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  18. sed
  19. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  20. [root@testserver ~]# sed '2a\s\
  21. e\
  22. d' test.txt
  23. 1:2:3:a:b:c:A:B:C:1:2:3
  24. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  25. s
  26. e
  27. d
  28. 1:2:3:4:5:a:b:c:d:e:A:B:C:D:E:1:2:3:4:5
  29. 1:2:3:4:5:6:a:b:c:d:e:f:A:B:C:D:E:F:1:2:3:4:5:6
  30. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  31. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8

更改命令c作用实例

  1. [root@testserver ~]# sed '/4:5/c\sed' test.txt #匹配后删除该行并替换为sed
  2. 1:2:3:a:b:c:A:B:C:1:2:3
  3. 1:2:3:4:a:b:c:d:A:B:C:D:1:2:3:4
  4. sed
  5. sed
  6. sed
  7. sed
  8. [root@testserver ~]# sed '2,5c\sed' test.txt  #把匹配的第二至第五三行替换为一行sed
  9. 1:2:3:a:b:c:A:B:C:1:2:3
  10. sed
  11. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  12. [root@testserver ~]#
  13. [root@testserver ~]# sed '/d:A/,4c\sed' test.txt #可以适用于范围
  14. 1:2:3:a:b:c:A:B:C:1:2:3
  15. sed
  16. 1:2:3:4:5:6:7:a:b:c:d:e:f:g:A:B:C:D:E:F:G:1:2:3:4:5:6:7
  17. 1:2:3:4:5:6:7:8:a:b:c:d:e:f:g:h:A:B:C:D:E:F:G:H:1:2:3:4:5:6:7:8
  18. #如何能匹配多少行后,替换也替换成多少行呢?
  19. #可以见sed操作实例(二)


阅读(924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~