事先说明,这是我在跟随老师学习过程中,从老师笔记中吸取的一点点经验,有很多都是老师笔记上的。我写这个博客,更多的是记录自己的学习过程,不喜勿碰。
一个超级有脑洞的流编辑器:sed
ps:反正我个人认为,写出sed的人脑洞炒鸡大!
sed的一些特性 (1)在线 (2)非交互式
sed工作流程
处理内容的方式:一次处理一行内容。 处理的过程:
处理到第一行的时候,把第一行储存在临时缓冲区中,叫做“模式空间”,接着用你给出的sed命令去处理模式空间里的内容,(但是,你文件本身的那一行文本没有动,我觉得就是复制进模式空间)处理结束后,把模式空间里的内容输出到屏幕上,然后处理下一行,不断地重复,直到文件末尾。文件内容没有改变,除非你使用重定向存储输出。(还是老师说的精辟)
命令格式
sed [options] 'command' file(s) 这个是直接用命令 sed [options] -f scriptfile file(s) 这个是把命令写在文件里,当脚本使用,我确实觉得这个好麻烦。
有个很重要的,返回值! sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0 只有当命令存在语法错误时,sed的退出状态才是非0
支持正则表达式(RE)!而且可以在文件模式下使用(就是你vim到文件里也可以用)
使用基本元字符集 ^, $, ., *, [], [^], < >,(),{} 使用扩展元字符集 ?, +, { }, |, ( )
使用扩展元字符的方式: \ (转译) sed -r (选项) a 在当前行后添加一行或多行 c 用新文本修改(替换)当前行中的文本 d 删除行 i 在当前行之前插入文本 l 列出非打印字符 p 打印行 n 读入下一输入行,并从下一条命令而不是第一条命令开始对其进行处理 q 退出 ! 对所选行以外的所有行应用命令 s 用一个字符串替换另一个(g 全局替换,i 忽略大小写) r 从文件中读 w 将文件写入文件 y 将字符转成另一字符(不支持正则表达式) h 把模式空间里的内容覆盖到暂存缓冲区 H 把模式空间里的内容追加到暂存缓冲区 g 把暂存缓冲区的内容,覆盖到模式空间 G 把暂存缓冲区的内容,追加到模式空间 x 交换暂存缓冲区与模式空间的内容
选项
-e 允许多项编辑(其实命令之间用;号就好了,简单方便!) -f 指定sed 脚本文件 (ps:sed [options] -f scriptfile file(s)) -n 取消默认输出(就是你改哪行了,输出那行) -i 就地编辑(就是直接改文件了!千万不要乱用,我就把/etc/passwd给改了,嗷嗷哭!) -r 支持扩展元字符