Chinaunix首页 | 论坛 | 博客
  • 博客访问: 89068
  • 博文数量: 99
  • 博客积分: 55
  • 博客等级: 民兵
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 21:29
文章分类

全部博文(99)

文章存档

2013年(5)

2012年(94)

我的朋友

分类:

2012-09-06 10:50:04

原文地址:Sed流编辑器学习札记 作者:huangliglog

1.案例

  1. 1.    sed '/my/d' file
  2. 2.    #删除file文本中所有包含my的行
  3. 3.    sed '/my/!d' file
  4. 4.    #删除所有不包含my的行
  5. 5.    sed '3d' file
  6. 6.    #删除第三行
  7. 7.    sed '3,$d' file
  8. 8.    #删除第三行到最后一行的内容
  9. 9.    sed '$d' file
  10. 10.    #删除最后一行
  11. 11.    #sed选项-e、-f、-n。-e用于命令行上指定多项编辑;-f后面带sed脚本文件名;-n则用于取消打印输出
  12. 12.    sed '/my/p' file
  13. 13.    #sed会把输入的所有行都打印在标准输出上,而且如果有某行匹配的话,则改行另行打一遍
  14. 14.    sed -n '/my/p' file
  15. 15.    #sed只打印匹配的行
  16. 16.    sed 's/my/mymy/g' file
  17. 17.    #s为替换命令,g为全局替换,将文本的所有my替换为mymy
  18. 18.    sed -n 's/my/mymy/p' file
  19. 19.    #只打印发生替换的那些行
  20. 20.    sed 's/my/&.huang/' file
  21. 21.    #&用在查找串中匹配到的内容后,替换成my.huang
  22. 22.    sed -n 's/my/huang/gp' file
  23. 23.    #my替换为huang;发生变化的行被打出来;-n,p取消缺省的输出
  24. 24.    sed -n 's/\(m\)y/\1ime/p' file
  25. 25.    #将圆括号里面的m作为标签1被保存于特殊的寄存器中,替换串通过\1引用它;y被替换为ime;
  26. 26.    sed -n 's#\(m\)y#\1ime#p' file
  27. 27.    #紧跟在s命令后面的字符就是查找串和替换串之间的分隔符;这种方法在查找包含正斜杠的模式时很管用,例如查找路径或生日
  28. 28.    sed -n '/^For/,/^of/s/$/**aaaa**/p' file
  29. 29.    #修改从行首For到行首of行的所有行,将各行的行尾替换成字符串**aaaa**.
  30. 30.    sed -e '1,3d' -e 's/my/mine/' file
  31. 31.    #选项-e用于多重编辑;第一重编辑为删除操作,第二重编辑为替换操作,前一次的操作会影响后一次的操作。
  32. 32.    sed '/that/r newfile' file
  33. 33.    #r为读文件命令,读取文件匹配的指定行,就该行读入newfile里的信息
  34. 34.    sed '/that/w newfile' file
  35. 35.    #w把指定行写入文件;文件file中所有包含that的行都被写入newfile中
  36. 36.    sed '/^For/a\\>----------changfile-----------<' file
  37. 37.    #a用于追加,字符串>----------changfile-----------<被追加到以For开头的各行后,sed要求a命令后面跟一个反斜杠,本例中第二个反斜杠给c shell解释用来转义换行符,b shell和k shell 都不用,他们要求引号成对就OK。
  38. 38.    sed '/^For/i\new line begin >+++++++++++++++++++++<' file
  39. 39.    #命令i是用于插入,如果某行匹配到For行,就在该行的上方插入命令中反斜杠后面的文本
  40. 40.    # sed '/^For/i\new line begin\
  41.  >+++++++++++++++++++++<' file
  42. 41.    #这样能实现文本中换行显示
  43. 42.    sed '/that/{n;s/I/Ime/;}' file
  44. 43.    #如果在某行匹配到that,n命令指示匹配到的下一行用s/I/Ime/命令替换
  45. 44.    sed '1,3y/abcdefg/ABCDEFG/' file
  46. 45.    #y为转换命令,将1-3行中的a-g的小写字母换成大写字母
  47. 46.    sed '5q' file
  48. 47.    #q为退出命令,打印5行后退出
  49. 48.    sed '/^For/{s/For/ForMe/;q;}' file
  50. 49.    #某行匹配到行首为For后,在进行替换命令后,打印后退出
  51. 50.    sed -e '/^For/{h;d;}' -e '/^of/{G;}' file
  52. 51.    #在某行找到For行首的匹配行后,h命令就将该行从模式缓冲区拷贝到一个暂存缓冲区;d命令将模式缓冲区的那份拷贝删除;G命令将保存在暂存缓冲区的行可以在以后被重新取出
  53. 52.    sed -e '/^For/h' -e '/^of/x' file
  54. 53.    #x命令将暂存缓冲区的内容和模式空间内的当前互换;
  55. 54.    sed '/^For/c\**************huang**********' file
  56. 55.    #c命令把匹配的行替换成后面的文本

2. Sed命令

调用sed命令有两种形式:

sed [options] 'command' file(s)

sed [options] -f scriptfile file(s)


  1. a\
  2. 在当前行后面加入一行文本。
  3. b lable
  4. 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
  5. c\
  6. 用新的文本改变本行的文本。
  7. d
  8. 从模板块(Pattern space)位置删除行。
  9. D
  10. 删除模板块的第一行。
  11. i\
  12. 在当前行上面插入文本。
  13. h
  14. 拷贝模板块的内容到内存中的缓冲区。
  15. H
  16. 追加模板块的内容到内存中的缓冲区
  17. g
  18. 获得内存缓冲区的内容,并替代当前模板块中的文本。
  19. G
  20. 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
  21. l
  22. 列表不能打印字符的清单。
  23. n
  24. 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
  25. N
  26. 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
  27. p
  28. 打印模板块的行。
  29. P(大写)
  30. 打印模板块的第一行。
  31. q
  32. 退出Sed。
  33. r file
  34. 从file中读行。
  35. t label
  36. if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  37. T label
  38. 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
  39. w file
  40. 写并追加模板块到file末尾。
  41. W file
  42. 写并追加模板块的第一行到file末尾。
  43. !
  44. 表示后面的命令对所有没有被选定的行发生作用。
  45. s/re/string
  46. 用string替换正则表达式re。
  47. =
  48. 打印当前行号码。
  49. #
  50. 把注释扩展到下一个换行符以前。
  51. 以下的是替换标记
  52. g
  53. 表示行内全面替换。
  54. p
  55. 表示打印行。
  56. w
  57. 表示把行写入一个文件。
  58. x
  59. 表示互换模板块中的文本和缓冲区中的文本。
  60. y
  61. 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
3.选项

  1. -e command, --expression=command
  2. 允许多台编辑。
  3. -h, --help
  4. 打印帮助,并显示bug列表的地址。
  5. -n, --quiet, --silent
  6. 取消默认输出。
  7. -f, --filer=script-file
  8. 引导sed脚本文件名。
  9. -V, --version
  10. 打印版本和版权信息。
4.元字符集

  1. ^
  2. 锚定行的开始 如:/^sed/匹配所有以sed开头的行。
  3. $
  4. 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
  5. .
  6. 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
  7. *
  8. 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
  9. []
  10. 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
  11. [^]
  12. 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
  13. \(..\)
  14. 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
  15. &
  16. 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
  17. \<
  18. 锚定单词的开始,如:/\
  19. \>
  20. 锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
  21. x\{m\}
  22. 重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
  23. x\{m,\}
  24. 重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
  25. x\{m,n\}
  26. 重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。



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