这三个sed命令到底有什么不同

第一个直接报错;第二个没有输出r b的内容;第三个是想要的结果。
诡异的是用sedsed -d看第二个和第三个输出内容完全是一样的
  1. # cat a
  2. 123
  3. 124
  4. dcd
  5. 125

  6. # cat b
  7. __aa
  8. __bb
  9. __cc

  10. # sed '/dcd/{r b;N}' a
  11. sed: -e expression #1, char 0: unmatched `{'

  12. # sed '/dcd/{r b;
  13. N}' a
  14. 123
  15. 124
  16. dcd
  17. 125

  18. # sed '/dcd/{r b
  19. ;N}' a
  20. 123
  21. 124
  22. __aa
  23. __bb
  24. __cc
  25. dcd
  26. 125
复制代码

作者: Estwind   发布时间: 2011-06-10

回复 Estwind


你可以先创建一个名为"bb;"的文件,执行下面的,可以帮助你理解
  1. cat bb;
  2. __aa
  3. __bb
  4. __cc

  5. sed '/dcd/r bb;' aa
  6. 123
  7. 124
  8. dcd
  9. __aa
  10. __bb
  11. __cc
  12. 125

  13. sed '/dcd/r bb' aa
  14. 123
  15. 124
  16. __aa
  17. __bb
  18. __cc
  19. dcd
  20. 125

  21. sed '/dcd/{r bb;}' aa
  22. sed: -e expression #1, char 0: unmatched `{'   #显然这个是对"{}"的错误用法,应该是下面的

  23. sed '/dcd/{r bb;
  24. }' aa
  25. 123
  26. 124
  27. dcd
  28. __aa
  29. __bb
  30. __cc
  31. 125
复制代码
总结一下,sed中的r命令会把其后面的任何字符判读为文件名,直到回车符或是单引号,一般对r命令的写法有下面的几种:
  1. sed '/pattern/{r file1
  2. other cmd
  3. }' file  # 因为这里里面使用了{},所以可以添加其它命令


  4. sed '/pattern/ r file1 ' file  

  5. sed -e '/pattern/{r file1' -e 'other cmd}' file # 这里使用-e,相当于第一种用法
复制代码

作者: yinyuemi   发布时间: 2011-06-11

回复 yinyuemi


    学习了

作者: zzy7186   发布时间: 2011-06-11