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
本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1629995如需转载请自行联系原作者
Winthcloud