您的位置:首页 > 其它

存储过程编写经验和优化措施

2010-01-06 11:07 274 查看
linux 三大文本处理工具 grep sed awk
之前有说过grep 今天来看看sed命令

简介
sed (Stream EDitor)流编辑器,是非交互式的编辑器,它一次处理一行内容。而且此编辑器默认不会对原文件做修改,如果想要修改使用shell重定向保存结果。默认情况下,所有的输出行都会被打印在屏幕上。
sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕上。处理过程如下:
首先sed 把当前正在处理的行保存在一个临时的缓冲区中(也称为模式空间pattern space),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。 sed 每处理完一行就将其缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便运行结束。sed 每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

sed 基本格式
sed [option] "AddressCommand" file

Address
大义是指定该文件中的哪一行或者被定位到的行,支持正规则表达式,数字。如果没有指定行,则默认为处理所有行。

startlike,endline 例

1,100 则定位到文本中的第一行到100行
$ 表示最后一行
$-1 表示倒数第二行
2. /RegExp/ 中间是正规则表达式 例
/^root/ 匹配以root开头的行
3. /pattern/,/pattern2/ 匹配从第一次被pattern1匹配到的行,到第一次被pattern2匹配到的行结束这中间的所有行
4. LineNumber 只给一个数字,则精确匹配到该行
5. startline,+N N是数字 表示从startline 行开始向后匹配N行。

Command
这个是对前边所匹配到的行做字处理 ,比如删除,修改,替换等等
d 删除符合条件的行

a \"string" 可不加引号, 在符合条件的行的后面追加新行,内容为string. \n 是换行符
i \"string" 可不加引号, 在符合条件的行的前面追加新行,内容为string. string 的意思是这个地方你输出什么,则为该行后边添加什么。

p 显示符合条件的行,默认情况下会使符合的行数显示两次(这个是因为patter space的原因)
r FILE 将指定的文件的内容添加到符合条件的行处
w FILE 将地址指定的范围内的的行另存至指定的文件中
s/parttern/string/ 查找和替换 替换默认只替换每行中被第一次模式匹配到的字符串
如果都把模式匹配到的都替换需加修饰符
g 表示全局替换(global)
i 忽略大小写 ignore
s/// 分隔符可用其它特殊字符替换如 s@@@ s###

&表示引用前边模式匹配中的字符串

\(\) 后向引用

[option]
这个是可选选项,即可用也可以不用这个选项
-n 静默模式,不再默认显示模式空间中的内容。
-i 直接修改原文件
-e 可以同时执行多个脚本

即sed -e "AddressCommand" -e "AddressCommand" -e "AddressCommand" File
-f FILE 把sed脚本执行到指定的文件
-r 表示使用扩展正则表达式

sed 练习

1. 删除/etc/grub.conf文件中行首的空白字符
sed 's/^[[:space:]]*//' /etc/grub.conf

2. 替换/etc/inittab文件中“id:3:initdefault:“一行中的数字为5
sed 's/\(id:\)3/\15/' /etc/inittab

3. 删除/etc/inittab文件中的空白行(由于我linux系统是由#加空白字符组成的行所以我的是删除#开头整行空白的行)
sed '/^#[[:space:]]*$/d' /etc/inittab

4. 删除/etc/inittab文件中开头的$号
sed 's/^#//' /etc/inittab

5. 删除某文件中开头的$号以及后面的空白字符,但要求#号后面必须有空白字符的才删除
sed 's/^#[[:space:]]//' PATH
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: