1.案例
- 1. sed '/my/d' file
- 2. #删除file文本中所有包含my的行
- 3. sed '/my/!d' file
- 4. #删除所有不包含my的行
- 5. sed '3d' file
- 6. #删除第三行
- 7. sed '3,$d' file
- 8. #删除第三行到最后一行的内容
- 9. sed '$d' file
- 10. #删除最后一行
- 11. #sed选项-e、-f、-n。-e用于命令行上指定多项编辑;-f后面带sed脚本文件名;-n则用于取消打印输出
- 12. sed '/my/p' file
- 13. #sed会把输入的所有行都打印在标准输出上,而且如果有某行匹配的话,则改行另行打一遍
- 14. sed -n '/my/p' file
- 15. #sed只打印匹配的行
- 16. sed 's/my/mymy/g' file
- 17. #s为替换命令,g为全局替换,将文本的所有my替换为mymy
- 18. sed -n 's/my/mymy/p' file
- 19. #只打印发生替换的那些行
- 20. sed 's/my/&.huang/' file
- 21. #&用在查找串中匹配到的内容后,替换成my.huang
- 22. sed -n 's/my/huang/gp' file
- 23. #my替换为huang;发生变化的行被打出来;-n,p取消缺省的输出
- 24. sed -n 's/\(m\)y/\1ime/p' file
- 25. #将圆括号里面的m作为标签1被保存于特殊的寄存器中,替换串通过\1引用它;y被替换为ime;
- 26. sed -n 's#\(m\)y#\1ime#p' file
- 27. #紧跟在s命令后面的字符就是查找串和替换串之间的分隔符;这种方法在查找包含正斜杠的模式时很管用,例如查找路径或生日
- 28. sed -n '/^For/,/^of/s/$/**aaaa**/p' file
- 29. #修改从行首For到行首of行的所有行,将各行的行尾替换成字符串**aaaa**.
- 30. sed -e '1,3d' -e 's/my/mine/' file
- 31. #选项-e用于多重编辑;第一重编辑为删除操作,第二重编辑为替换操作,前一次的操作会影响后一次的操作。
- 32. sed '/that/r newfile' file
- 33. #r为读文件命令,读取文件匹配的指定行,就该行读入newfile里的信息
- 34. sed '/that/w newfile' file
- 35. #w把指定行写入文件;文件file中所有包含that的行都被写入newfile中
- 36. sed '/^For/a\\>----------changfile-----------<' file
- 37. #a用于追加,字符串>----------changfile-----------<被追加到以For开头的各行后,sed要求a命令后面跟一个反斜杠,本例中第二个反斜杠给c shell解释用来转义换行符,b shell和k shell 都不用,他们要求引号成对就OK。
- 38. sed '/^For/i\new line begin >+++++++++++++++++++++<' file
- 39. #命令i是用于插入,如果某行匹配到For行,就在该行的上方插入命令中反斜杠后面的文本
- 40. # sed '/^For/i\new line begin\
- >+++++++++++++++++++++<' file
- 41. #这样能实现文本中换行显示
- 42. sed '/that/{n;s/I/Ime/;}' file
- 43. #如果在某行匹配到that,n命令指示匹配到的下一行用s/I/Ime/命令替换
- 44. sed '1,3y/abcdefg/ABCDEFG/' file
- 45. #y为转换命令,将1-3行中的a-g的小写字母换成大写字母
- 46. sed '5q' file
- 47. #q为退出命令,打印5行后退出
- 48. sed '/^For/{s/For/ForMe/;q;}' file
- 49. #某行匹配到行首为For后,在进行替换命令后,打印后退出
- 50. sed -e '/^For/{h;d;}' -e '/^of/{G;}' file
- 51. #在某行找到For行首的匹配行后,h命令就将该行从模式缓冲区拷贝到一个暂存缓冲区;d命令将模式缓冲区的那份拷贝删除;G命令将保存在暂存缓冲区的行可以在以后被重新取出
- 52. sed -e '/^For/h' -e '/^of/x' file
- 53. #x命令将暂存缓冲区的内容和模式空间内的当前互换;
- 54. sed '/^For/c\**************huang**********' file
- 55. #c命令把匹配的行替换成后面的文本
2. Sed命令
调用sed命令有两种形式:
sed [options] 'command' file(s)
sed [options] -f scriptfile file(s)
- a\
- 在当前行后面加入一行文本。
- b lable
- 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
- c\
- 用新的文本改变本行的文本。
- d
- 从模板块(Pattern space)位置删除行。
- D
- 删除模板块的第一行。
- i\
- 在当前行上面插入文本。
- h
- 拷贝模板块的内容到内存中的缓冲区。
- H
- 追加模板块的内容到内存中的缓冲区
- g
- 获得内存缓冲区的内容,并替代当前模板块中的文本。
- G
- 获得内存缓冲区的内容,并追加到当前模板块文本的后面。
- l
- 列表不能打印字符的清单。
- n
- 读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。
- N
- 追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。
- p
- 打印模板块的行。
- P(大写)
- 打印模板块的第一行。
- q
- 退出Sed。
- r file
- 从file中读行。
- t label
- if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
- T label
- 错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。
- w file
- 写并追加模板块到file末尾。
- W file
- 写并追加模板块的第一行到file末尾。
- !
- 表示后面的命令对所有没有被选定的行发生作用。
- s/re/string
- 用string替换正则表达式re。
- =
- 打印当前行号码。
- #
- 把注释扩展到下一个换行符以前。
- 以下的是替换标记
- g
- 表示行内全面替换。
- p
- 表示打印行。
- w
- 表示把行写入一个文件。
- x
- 表示互换模板块中的文本和缓冲区中的文本。
- y
- 表示把一个字符翻译为另外的字符(但是不用于正则表达式)
3.选项- -e command, --expression=command
- 允许多台编辑。
- -h, --help
- 打印帮助,并显示bug列表的地址。
- -n, --quiet, --silent
- 取消默认输出。
- -f, --filer=script-file
- 引导sed脚本文件名。
- -V, --version
- 打印版本和版权信息。
4.元字符集- ^
- 锚定行的开始 如:/^sed/匹配所有以sed开头的行。
- $
- 锚定行的结束 如:/sed$/匹配所有以sed结尾的行。
- .
- 匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。
- *
- 匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
- []
- 匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
- [^]
- 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
- \(..\)
- 保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
- &
- 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
- \<
- 锚定单词的开始,如:/\
- \>
- 锚定单词的结束,如/love\>/匹配包含以love结尾的单词的行。
- x\{m\}
- 重复字符x,m次,如:/0\{5\}/匹配包含5个o的行。
- x\{m,\}
- 重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。
- x\{m,n\}
- 重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
阅读(228) | 评论(0) | 转发(0) |