sed:streameditor,意为流编辑器,是类Unix操作系统常见的命令行程序。sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出;sed通常用来匹配一个或多个正则表达式的文本进行处理。
sed工作原理:
sed维护了两个数据的缓冲空间:模式空间(patternspace)和保留空间(hold space),初始环境都为空;
1、当sed命令对一个文本文件进行处理,逐行读取文本文件进行地址匹配,将匹配到的行放在模式空间中;
2、sed的编辑命令对模式空间中的内容进行编辑操作,然后将编辑后的内容放在保留空间;
3、继续读取下一行执行以上操作,直到最后一行;
正则表达式:与之前学习到的grep命令一样,sed命令的地址模式匹配支持正则表达式;
BRE:
字符匹配:.,[],[^]
次数匹配:*,\?,\+,\{m,n\}
位置锚定:^,$,\<,\>
分组引用:\(\),\1,、2...
ERE:
次数匹配:*,?,+,{m,n}
分组:()
或者:|
sed命令格式:
# sed [option] '地址・编辑命令' FILE
sed常用选项:
-n:静默模式,不显示模式空间中的内容 -r:支持使用扩展正则表达式; -i:修改原文件; -e:sed -e ""-e "" -e "",sed "{COM1;COM2;COM3}";表示使用多个命令 -f /PATH/TO/SED_SCRIPT:从指定的文本中读取处理脚本;
编辑命令:命令可在之前加!取反
p:打印; d:删除; i \TEST:匹配到的行上方插入TEST内容; a \TEST:匹配到的行下方插入TEST内容; c \TEST:修改匹配到的TEST内容; r /PATH/TO/SOME_FILE:匹配到的内容下方插入指定文件; w /PATH/TO/SOME_FILE:把符合条件的行保存至指定的文件中; =:显示符合条件行的行号; s/TEST1/TEST2/gi,s@TEST1@TEST2@gi:内容替换
地址:
行范围:
sratr_line,end_line:起始行,结束行
/patten1/,/patten2/:第一次被pattern1匹配到的行开始,到第一次被pattern2匹配到的行结束之间的所有行;
特定行:
line
/pattern/
无地址:全文
实例练习:
1、复制/etc/inittab文件至/tmp/目录,替换/tmp/inittab文件中的"id:3:initdefault"一行数字为5;
# cp /etc/inittab /tmp/ # sed's/id:3:initdefault/id:5:initdefault/' /tmp/inittab
2、复制/etc/rc.d/init.d/functions文件至/tmp目录,删除/tmp/functions文件的空白行;
# cp /etc/rc.d/init.d/functions/tmp/ # sed '/^[[:space:]]*$/d'/tmp/functions
3、复制/boot/grub/grub.conf文件至/tmp/目录,删除/tmp/grub.conf文件中行首的空白字符;
# cp /boot/grub/grub.conf /tmp/ # sed 's@^[[:space:]]\+@@'/tmp/grub.conf
4、echo一个路径给sed,通过sed取出其路径名;例如echo"etc/sysconfig/network-scripts/" | sed,返回路径名/etc/sysconfig/;
# echo"/etc/sysconfig/network-scripts/" | sed 's@[^/]\+/\?$@@'
本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1693919